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

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

Linux 下GCC的于处理器CPP使用实例

来源: 未知 分享至:

 [root@localhost ansi]# cpp -dM /dev/null  //查看GCC内部自定义的宏

第一:通过使用宏去掉注释

[root@localhost ansi]# vim dtest.c

 

#include <stdio.h>

 

int main(void)

{

#ifdef TEST

        printf("Test mode\n");

#endif

        printf("Tuning......\n");

        return 0;

}

1、使用宏(拿掉#if 0 …………#end if的注释)

[root@localhost ansi]# gcc -Wall -O -DTEST dtest.c -o dt

[root@localhost ansi]# ./dt

Test mode

Tuning......2、不使用宏

[root@localhost ansi]# gcc -Wall -O dtest.c -o wanyan

[root@localhost ansi]# ./wanyan

Tuning......

第二:通过宏实现赋值

[root@localhost ansi]# vim num.c

 

#include <stdio.h>

 

int main(void)

{

        printf("Value of NUM is %d\n",NUM);

        return 0;

}

1、只写-D默认的值为1(正确)

[root@localhost ansi]# gcc -Wall -O -DNUM num.c -o num

[root@localhost ansi]# ./num

Value of NUM is 1

2、给D赋值(正确)

[root@localhost ansi]# gcc -Wall -O -DNUM=123 num.c -o wanyan

[root@localhost ansi]# ./wanyan

Value of NUM is 123

3、不写-D(错误)

[root@localhost ansi]# gcc -Wall -O num.c -o ethnicitybeta

num.c: In function 'main':

num.c:5: error: 'NUM' undeclared (first use in this function)

num.c:5: error: (Each undeclared identifier is reported only once

num.c:5: error: for each function it appears in.)

第三:编译的过程(模拟),过程.c(原始代码部分)-->.i(预处理的部分)-->.s(汇编语言部分)-->.o(包含机器码的部分,目标文件)-->可执行的文件

[root@localhost test]# vim bad.c

 

#include <stdio.h>

 

int main(void)

{

        printf("2 plus 2 is %d\n",4);

        return 0;

}

~   

下边这个步骤就是为了保存预处理的结果文件 

[root@localhost test]# gcc -Wall -O -c -save-temps bad.c   //重点在-save-temps的使用

[root@localhost test]# ls

bad.c  bad.i  bad.o  bad.s

第四:GCC –E来查看过程(并不是真正的编译)

[root@localhost test]# vim bad.c

 

#include <stdio.h>

 

int main(void)

{

        printf("2 plus 2 is %d\n",4);

        return 0;

}

 

[root@localhost test]# gcc -E bad.c

………..

…………

………..

extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__));

# 844 "/usr/include/stdio.h" 3 4

 

# 2 "bad.c" 2

 

int main(void)

{

 printf("2 plus 2 is %d\n",4);

 return 0;

}

实验结束

总结:这篇文章是对小布老师视频学习的一个笔记,这个主要是GNU C的预处理功能模块CPP的应用,包括宏的使用和查看编译过程。

 


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