【问题标题】:What use is macro expansion on an "#include" line?“#include”行上的宏扩展有什么用?
【发布时间】: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”选项正是我的意思。

标签: include c-preprocessor


【解决方案1】:

一个用例是,它可以帮助您从几个不同的头文件中选择一个包含到您的程序中。 check this link

【讨论】:

  • 我觉得你并没有真正阅读这个问题,因为我已经在问题的最后 4 句话中提到了“用例”和那个链接。
猜你喜欢
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多