第一:符合ansi标准的实例:
[root@localhost ansi]# vim ansi.c
#include <stdio.h>
int main(void)
{
const char asm[] = "6502";
printf("The string asm is '%s'\n",asm);
return 0;
}
首先用GNU C的标准来编译
[root@localhost ansi]# gcc -Wall -O ansi.c -o ansi //出现错误
ansi.c: In function 'main':
ansi.c:5: error: expected identifier or '(' before 'asm'
ansi.c:6: error: expected expression before 'asm'
对比用STANDARD C的标准来编译
[root@localhost ansi]# gcc -Wall -O -ansi -pedantic ansi.c -o ansi //成功
[root@localhost ansi]# ./ansi
The string asm is '6502'
第二:符合GNU C标准但是不兼容标准C标准的实例
[root@localhost ansi]# vim pi.c
#include <stdio.h>
#include <math.h>
int main(void)
{
printf("The value of pi is %f\n",M_PI);
return 0;
}
首先用STANDARD C的标准来编译
1、使用标准C来编译同时使用标准C的库
[root@localhost ansi]# gcc -Wall -O -ansi -pedantic pi.c -o pi //出现错误
pi.c: In function 'main':
pi.c:6: error: 'M_PI' undeclared (first use in this function)
pi.c:6: error: (Each undeclared identifier is reported only once
pi.c:6: error: for each function it appears in.)
2、使用标准C来编译但是使用GNU C的库(通过宏定义来实现)
[root@localhost ansi]# gcc -Wall -o -ansi -D_GNU_SOURCE pi.c -o laji //成功
[root@localhost ansi]# ./laji
The value of pi is 3.141593
对比用GNU C的标准来编译
[root@localhost ansi]# gcc -Wall -O pi.c -o pi //成功
[root@localhost ansi]# ./pi
The value of pi is 3.141593
第三:两者都可以,但是会出现警告的实例
[root@localhost ansi]# vim v.c
#include <stdio.h>
int main(int argc,char* argv[])
{
int i,n=argc;
double x[n];
for(i=0;i<n;i++)
x[i] = i;
return 0;
}
用GNU C的标准来编译
[root@localhost ansi]# gcc -Wall -O v.c
[root@localhost ansi]# ls
a. Out
用STANDARD C的标准来编译
1、不加pedantic参数
[root@localhost ansi]# gcc -Wall -O -ansi v.c
[root@localhost ansi]# ls a.out
a.out
2、加pedantic的参数
[root@localhost ansi]# gcc -Wall -O -ansi -pedantic v.c
v.c: In function 'main':
v.c:6: warning: ISO C90 forbids variable-size array 'x'
[root@localhost ansi]# ls a.out
a. out
实验结束