【发布时间】:2015-08-15 01:27:05
【问题描述】:
“#include”行上的宏扩展有什么实际用途吗?
比如像这样的头文件
// calculated_include.h
#define THE_STRING "Hello, World!\n"
然后是 C 或 C++ 文件,如
// calculated_include.c
#define HEADER_MACRO "calculated_include.h"
#define STDIO <stdio.h>
#include STDIO
#include HEADER_MACRO
int main(void){
printf("%s", THE_STRING );
}
然后从命令行我做
make calculated_include
./calculated_include
它会打印出来,正如您可能已经猜到的那样,
你好,世界!
我看到有些人在“#include”行上调用宏扩展"calculated includes" 或"computed includes";有更好的名字吗?
我看到有人想在“#include”文件中使用文本替换,因此在 gcc 命令行中使用“-D”选项指定的文件名将被替换为“#include”语句( How can I specify an include file from the GCC Command Line?)。 但在我看来,直接使用“-include”命令行选项(Include header files using command line option? 和 "Options Controlling the Preprocessor")指定该文件名会更简单,也能正常工作。
“#include”行上的宏扩展还有其他用途吗?
【问题讨论】:
-
您可以使用它来包含另一个架构(不同的 CPU 或平台)或指定构建变体(例如调试或发布)的头文件。然后,您的宏将定义查找包含文件的路径。显然,还有其他方法可以实现这一点。
-
我认为您的意思是
-include选项,但无论如何这是 gcc 特定的,其他编译器可能没有类似的选项。另一方面,每个编译器都有一个等价于-D。 -
@rici:谢谢,“-include”选项正是我的意思。