Zxc*_*Mnb 6 c++ c-preprocessor
我有2个文件作为qwe.h
#ifndef QWE_H
#define QWE_H
//#include <iostream>
int asd();
#endif
Run Code Online (Sandbox Code Playgroud)
qwe.cc
#include "qwe.h"
int asd()
{
std::cout<<"asdasd";
}
Run Code Online (Sandbox Code Playgroud)
仅运行预处理器以g++ -E qwe.cpp > op4
提供以下输出
# 1 "qwe.cpp"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "qwe.cpp"
# 1 "qwe.h" 1
int asd();
# 2 "qwe.cpp" 2
int asd()
{
std::cout<<"asdasd";
}
Run Code Online (Sandbox Code Playgroud)
预处理器输出不应该是有效的C/C++文件吗?语句的含义是什么意思"#int string int"
GCC尽力使预处理器输出转储仍然是有效的源代码.但一般的答案是否定的,它不是为了这个目的.
您还可以通过该-P选项-E使其更具机器可读性,并且人性化程度较低.将剥离更多的空格,并且# 234 "blah.h"不会出现标记.
预处理器输出不应该是有效的c/c ++文件吗?
预处理器所做的很大一部分是lexing,或将源分为令牌.然后它扩展宏,根据一定的规则生成令牌和空格.宏可以生成不被空格分隔的标记.根据标准,直接呈现为文本的预处理器输出通常不可能分成正确的标记.
GCC通过引入更多的空格来尽量满足预期处理器输出可以表示为文本的期望,但它依赖并不是一件好事,当然也不能移植到其他编译器.