【问题标题】:C++ Preprocessor Macros with relation to Include files [duplicate]与包含文件相关的 C++ 预处理器宏 [重复]
【发布时间】:2014-12-27 05:44:43
【问题描述】:

我只是想知道 C++ 预处理器是否支持以下宏:

#define include<a> include<a.h>

哪个会转化

#include<stdio>

进入

#include<stdio.h>

有人有什么想法吗?

【问题讨论】:

  • 对重复问题的接受答案并不是那么有帮助。其他一些答案更有帮助。关键是,即使宏处理的输出看起来像预处理器指令,它不是预处理器指令。因此,您无法从宏生成行的 #include 部分。但是,您可以将#include 行的文件名部分生成为宏。你只需要小心一点,仅此而已。

标签: c++ macros include c-preprocessor


【解决方案1】:

#include 指令不能直接用宏替换。但是,要包含的实体可以是宏扩展的结果。也就是说,如果您需要使用不同的标头名称,您可以定义一个扩展为所包含内容的宏,例如:

#define CONCAT(a,b) a ## b
#ifdef USE_C_NAMES
#   define MAKE_NAME(x) <x.h>
#else
#    define MAKE_NAME(x) <CONCAT(c,x)>
#endif
#include MAKE_NAME(stdio)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2018-04-03
    • 2016-07-29
    相关资源
    最近更新 更多