コンパイラコースのセマンティック分析を行っているときに混乱しました。定数の初期化要素ではありませんか?
#include <stdio.h>
int a = "abcd"[2];
int main()
{
char b = "abcd"[2];
printf("%d\n%c\n", a, b);
return 0;
}
GCCは、変数 "a"に対して "error:initializer要素が定数ではありません"と表示します。
なぜですか?
gcc quirkのように見えますが([clang]はかなり満足しています)(https://godbolt.org/g/0CPrpX)、[IntelのICC](https://godbolt.org/g/JGL3nL) )。 –
@PaulRアセンブリを見ると、clangはそれを定数式として扱いません(値はmainの先頭で計算され、変数に格納されます)。だから、グローバルイニシャライザが静的である必要があるという標準の要求をclangが落としたように見えます。 – sepp2k
それはvsで私のためにコンパイルされ、99 c –