Lnux下GNU C和standard C(ANSI/ISO)区分实例

第一:符合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

实验结束

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/22909.html