私はextern
キーワードでCと遊んでいましたが、この奇妙な動作に遭遇しました。 私は2つのファイルがあります:Cのconstの外部リンク
FILE1.Cを
#include<stdio.h>
int main()
{
extern int a;
a=10;
printf("%d",a);
return 0;
}
file2.c
const int a=100;
私は一緒にこれらのファイルをコンパイルすると、エラーまたは警告と私はそれらを実行し、出力はありません10
となる。私はコンパイラがラインa=10;
でエラーを報告するはずだと思っていました。私はグローバルのconst変数a
の初期化を削除したファイルをコンパイルした場合、ある
const int a;
にfile2.cの内容を変更した場合
また、まだエラーや警告はありませんが、私がそれらを実行すると、セグメンテーションフォルトが発生します。
この現象はなぜ発生しますか?定義されていない動作の下で分類されていますか?このコンパイラまたはマシンに依存していますか?
PS:これに関連する多くの質問がありましたが、C++用であるか、extern
についてのみ説明しています。
これをチェックしてください:http://stackoverflow.com/a/28734780/4085019 – PseudoAj
これはとても良い答えですが、私の質問には答えません。 – skrtbhtngr