问题
When I compile the following program I get errors :
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);
}
Why am I getting these errors ?
回答1:
Not all compilers are compliant with the C99 standard. For example Microsoft's compiler, does not support the C99 standard at all. If you are using MSVC on a x86 platform you will not have access to this critical optimization option.
When using GCC, remember to enable the C99 standard by adding -std=c99 to your compilation flags. In code that cannot be compiled with C99, use either
__restrict
or__restrict__
to enable the keyword as a GCC extension.
From here.
回答2:
Restrict is part of C99, and therefore you have to compile it as a C99 program by specifying -std=c99
flag to gcc.
gcc -std=c99 tester.c -o tester
来源:https://stackoverflow.com/questions/13155059/errors-as-i-use-the-restrict-qualifier