利用GCC预处理展开宏
2012-08-15 19:30
127 查看
http://blog.csdn.net/dyufei/article/details/7844566
C/C++在编译的过程中,依次进行:预处理,编译,汇编,链接。宏是在预处理时展开的而 gcc 的预处理选项为-E。
所以将调用宏的那部分代码单独提取出来,然后利用gcc对其进行预处理即可看到宏展开后的代码,方便理解。
方法:
gcc -Efile_name.c
例:
//macro_test.c
#include<stdio.h>
#definePRINT_MSG(MSG) printf(#MSG" is %d\n",MSG)
#define MAX_NUM (3)
int main()
{
intx=10,y=20;
PRINT_MSG(x+y);
intg_layer[ MAX_NUM];
for(int i=0;i< MAX_NUM;i++) g_layer[i] = i;
for (int i=0;i< MAX_NUM;i++)printf("[%d] =%d\n", i,g_layer[i]);
}
# gcc -E macro_test.c
处理后的结果:
int main()
{
int x=10,y=20;
printf("x+y"" is%d\n",x+y);
int g_layer[(3)];
for (int i=0;i<(3);i++) g_layer[i] = i;
for (int i=0;i<(3);i++)printf("[%d] =%d\n", i,g_layer[i]);
}
# gcc -std=c99macro_test.c -o macro_test.o
# ./macro_test.o
x+y is 30
[0] =0
[1] =1
[2] =2
//展开输入到文本
gcc -E lxnet.cpp 2>&1|tee lxnet.txt
C/C++在编译的过程中,依次进行:预处理,编译,汇编,链接。宏是在预处理时展开的而 gcc 的预处理选项为-E。
所以将调用宏的那部分代码单独提取出来,然后利用gcc对其进行预处理即可看到宏展开后的代码,方便理解。
方法:
gcc -Efile_name.c
例:
//macro_test.c
#include<stdio.h>
#definePRINT_MSG(MSG) printf(#MSG" is %d\n",MSG)
#define MAX_NUM (3)
int main()
{
intx=10,y=20;
PRINT_MSG(x+y);
intg_layer[ MAX_NUM];
for(int i=0;i< MAX_NUM;i++) g_layer[i] = i;
for (int i=0;i< MAX_NUM;i++)printf("[%d] =%d\n", i,g_layer[i]);
}
# gcc -E macro_test.c
处理后的结果:
int main()
{
int x=10,y=20;
printf("x+y"" is%d\n",x+y);
int g_layer[(3)];
for (int i=0;i<(3);i++) g_layer[i] = i;
for (int i=0;i<(3);i++)printf("[%d] =%d\n", i,g_layer[i]);
}
# gcc -std=c99macro_test.c -o macro_test.o
# ./macro_test.o
x+y is 30
[0] =0
[1] =1
[2] =2
//展开输入到文本
gcc -E lxnet.cpp 2>&1|tee lxnet.txt
相关文章推荐
- GCC编译的背后( 预处理和编译 汇编和链接)
- gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接
- 利用mingw编译最新的gcc
- 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)
- 利用 GCC 的 __attribute__ 属性的section选项 来控制 数据区的基地址
- 关于二战群里早早提出的一道我尝试了7种途径未有结果的反常积分(利用等比来展开,代换)
- 利用Matlab对图像进行简单的预处理
- 使用GCC仅对源文件做宏展开的方法
- VS2008中生成预处理文件,查看宏展开之后的内容
- 利用光盘在 centos5.4 上安装gcc步骤
- 利用js实现图片展开与收缩
- GCC编程过程:预处理-编译-汇编-链接
- GCC编译的背后( 预处理和编译 汇编和链接 )
- gcc编译背后(第一部分:预处理和编译)
- gcc 编译的四大过程(预处理-编译-汇编-链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC 预处理、编译、汇编、链接..
- 1.预处理,生成预编译文件(.文件): Gcc –E hello.c –o hello.i 2.编译,生成汇编代码(.s文件): Gcc –S hello.i –o hello.s 3.汇编,生成目标文件(.o文件): Gcc –c hello.s –o hello.o 4.链接,生成可执行文件: linux笔记
- gcc:预处理语句--#define、#error和#warning
- 收缩展开的竖直菜单(利用JS+CSS实现_网页代码站(www.webdm.cn)