参考链接
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() {
}
- 查看更多内容
g++ -E -fdirectives-only test.cpp
https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Preprocessor-Options.html#index-fdirectives-only
查看外部所有参数, 包含宏定义之类的;
文章评论