5
我遇到了一個問題,最近在下面的例子玩具完全編譯使用clang -ansi
:`鐺-ansi`擴展
int main(void)
{
for (int i = 0; 0;);
return i;
}
但gcc -ansi
提供了以下錯誤:
a.c: In function ‘main’:
a.c:3:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
a.c:3:5: note: use option -std=c99 or -std=gnu99 to compile your code
與clang -ansi -pedantic
顯示編譯正在使用C99擴展。
a.c:3:10: warning: variable declaration in for loop is a C99-specific feature [-pedantic,-Wc99-extensions]
for (int i = 0; 0;);
^
1 warning generated.
什麼其他的擴展不鐺允許與-ansi
選項?我如何禁用它們?
我剛剛幾分鐘前碰到了類似的問題:鐺允許在同一個塊可執行代碼後進行定義的變量 - 在C99合法的,但應該在ANSI是非法的。 – cdarke
上面的完整示例在C99中也是非法的,因爲在返回語句中使用'i'時沒有定義。 Clang和GCC同意這一點。似乎C99擴展的這種特殊用法使其合法。 – cyang
你是對的,我沒有在OPs代碼中發現(專注於我自己的問題)。 – cdarke