Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux系统 > » 正文

linux下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

实验结束

总结:这个实验是对小布老师视频教程的一个学习笔记,第一和第二个实例主要是为了区分GNU C和标准C之间的区别,第三个实例意在表明加上pedanticansi可以构造更加严格的标准C标准。


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史