6

次のプログラムをコンパイルすると、エラーが発生します。

gcc tester.c -o tester

tester.c: In function ‘main’:
tester.c:7:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ptr_X’
tester.c:7:17: error: ‘ptr_X’ undeclared (first use in this function)
tester.c:7:17: note: each undeclared identifier is reported only once for each function it appears in
tester.c:10:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ptr_Y’
tester.c:10:17: error: ‘ptr_Y’ undeclared (first use in this function)

#include <stdio.h>

int main() {
  int x = 10;
  int y = 20;

  int *restrict ptr_X;
  ptr_X = &x;

  int *restrict ptr_Y;
  ptr_Y = &y;

  printf("%d\n",*ptr_X);

  printf("%d\n",*ptr_Y);
}

なぜこれらのエラーが発生するのですか?

4

2 に答える 2

5

すべてのコンパイラがC99標準に準拠しているわけではありません。たとえば、Microsoftのコンパイラは、C99標準をまったくサポートしていません。x86プラットフォームでMSVCを使用している場合、この重要な最適化オプションにアクセスすることはできません。

GCCを使用する場合は、コンパイルフラグに-std = c99を追加して、C99標準を有効にすることを忘れないでください。C99でコンパイルできないコードでは、__restrictまたは__restrict__を使用して、キーワードをGCC拡張機能として有効にします。

ここから。

于 2012-10-31T09:47:34.303 に答える
1

-std=c99RestrictはC99の一部であるため、gccにフラグを指定してC99プログラムとしてコンパイルする必要があります。

gcc -std=c99 tester.c -o tester
于 2012-10-31T09:46:52.823 に答える