9

C89 は可変長配列をサポートしていないことを読みましたが、次の実験はそれを反証しているようです。

#include <stdio.h>

int main()
{
   int x;
   printf("Enter a number: ");
   scanf("%d", &x);
   int a[x];
   a[0] = 1;
   // ...
   return 0;
}

そのようにコンパイルすると(ファイル名が であると仮定va_test.c):

gcc va_test.c -std=c89 -o va_test

できます...

私は何が欠けていますか?:-)

4

3 に答える 3

10

GCC は常に可変長配列をサポートしていました。-std を C89 に設定しても、GCC 拡張機能は無効になりません ...

編集:実際にここをチェックすると:

http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options

-std= の下には、次のものがあります。

ISO C90 プログラム (ISO C90と競合する特定のGNU 拡張機能は無効になっています)。C コードの -ansi と同じ。

「ある」という言葉に注目してください。

于 2010-11-11T22:10:53.690 に答える
9

//C89 はコメントを認識しません。

C89 では、定義をコードと混在させることはできません。

の前にプロンプ​​トが確実に表示されるようにするfflush(stdout)には、 の後にを実行する必要があります。printfscanf

main「より良く見える」としてint main(void)

gcc -std=c89 -pedantic ...代わりに試す

于 2010-11-11T22:15:55.820 に答える
2

-pedanticがなければ、gcc は標準準拠の C コンパイラではない (そしてそうであると主張していない)ことを見逃しています。代わりに、さまざまな拡張機能を含む C の GNU 方言をコンパイルします。

于 2010-11-11T22:15:08.760 に答える