ホームページ >バックエンド開発 >C++ >C の const 変数はどのようにして 2 つの異なる値を持つことができますか?

C の const 変数はどのようにして 2 つの異なる値を持つことができますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-28 21:17:14233ブラウズ

How Can a Const Variable in C   Have Two Different Values?

未定義の動作が変数の 2 つの異なる値を説明する方法

逆説的に見えるかもしれませんが、同じアドレスにある変数については可能です2 つの異なる値を生成します。この現象は、未定義の動作が原因である可能性があります。

提供されたコード スニペットでは、定数整数 (a1) が定義され、定数ポインター (b1) にそのアドレスが割り当てられます。続いて、b1からcharポインタ(c1)がキャストされます。 c1 を変更すると、定数として宣言されているにもかかわらず、a1 の値が事実上変更されます。 c1 を整数ポインタ (t) にキャストして戻すと、この変更された値が明らかになります。

const 変数を変更しようとする試みは C 標準に違反するため、これらのアクションは未定義の動作になります。セクション 7.1.6.1 で指定されているように、そのような動作は、観察されたような一見不可能な結果を​​含む、予測不可能な結果につながる可能性があります。

標準では、そのような動作に対して明確に警告しています。

  • セクション 1.3.24 (未定義の動作): 「...未定義の動作には、状況を完全に無視するものから範囲があります。予測できない結果を伴う ... 変換または実行の終了 (診断メッセージの発行を伴う) まで。"
  • セクション 7.1.6.1 cv-qualifiers (段落 4): "。 .. const オブジェクトを変更しようとすると ... 未定義の動作が発生します。"

したがって、観察された動作は奇妙に思えるかもしれませんが、これはコンパイラの最適化ではなく、定数変数を変更しようとする試みから生じる未定義の動作の症状です。

以上がC の const 変数はどのようにして 2 つの異なる値を持つことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。