a.txt
a text
#include "b.txt"
b.txt
b text
如果我们使用 预处理上述文件cpp -P a.txt
,我们会在控制台中得到以下输出:
a text
b text
但是,如果我们尝试使用 进行预处理clang -P a.txt
,则会收到以下错误:
ld: unknown file type in '/Users/myUser/a.txt'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
clang
和的预处理行为有什么区别cpp
?特别是,它们在 .txt 文件的用例中有何区别?看似相关的线程,还有另一个指定给MacOS的。
cpp
是一个预处理器。clang
是一个编译器,可以在编译其输入文件之前调用预处理器。您不能仅将它们与相同的命令行选项一起使用。clang
类似于gcc
。两者都选择-E
只调用预处理阶段——并且都假设名称以 结尾的输入文件.txt
是供链接器使用的。以下内容适用于我的系统。该
-
参数告诉命令从标准输入读取,因此它看不到后缀.txt
。使用的预处理器
clang
添加了一个额外的空行。由于输出旨在被编译(通常为 C 或 C++),因此这通常并不重要。C 预处理器并不是真正的通用文本处理器。例如,它将输入拆分为预处理标记,因此单独的撇号可能会导致错误,因为预处理器将其视为不完整的字符常量。