C/C++ 预处理结果分析,代码分析

23 篇文章 0 订阅

参考链接

https://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html

核心工作

#define扩张替换

include替换并记录信息, debug -g有关;

输出格式

# linenum filename flags

linenum

即当前位置在${filename}中的linenum行扩张而来; 扩张结果可能多行;

filename

当前${linenum}${filename}位置;
一般是"test.cpp"格式, 绝对路径(系统头文件)或相对路径(相对当前或者 -I 指定的搜索目录);

flags: 1,2,3,4的任意组合;

1 表示${filename}的开始位置, 一般${linenum}也是1
2 表示${filename}的结束位置, ${linenum}一般是include指令所在文件行
3 表示内容来自标准头文件, 一些警告不处理(即使编译选项有 warning => error的选项);
4 表示extern "C", 即C标准代码, 编译器处理时不能进行重命名;

linenum == 0

即外部参数, 一般是外部传入宏定义;

案例一: 不包含系统头文件

  • 文件test.h
void show(){}
  • 文件test.cpp
#include "test.h"
int main() {}
  • 预处理g++ -E test.cpp
# 0 "test.cpp"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "test.cpp"
# 1 "test.h" 1
void show(){}
# 2 "test.cpp" 2
int main() {}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值