c++ - 我可以在#include 指令中使用预处理器变量吗?

标签 c++

这就是我想要做的:

$ c++ -D GENERATED=build/generated-content main.cpp

我的 main.cpp 文件:

#include "GENERATED/header.h"
void f() { /* something */ }

目前这段代码无法编译。我该如何解决?这是否可能?

最佳答案

您似乎想根据某些“编译配置文件”使用不同的 header 。

我宁愿建议使用 -I 指令来指定包含目录,而不是 -D 解决方案。

假设您有以下文件树:

/
  debug/
    header.h
  release/
    header.h

main.cpp:

#include "header.h"

/* some instructions, not relevant here */

并且在您的 Makefile(或您使用的任何工具)中,只需指定要使用的正确的 include 目录,具体取决于您想要的任何原因:

g++ -I debug main.cpp // Debug mode

g++ -I release main.cpp // Release mode

重要脚注:我不知道您是否打算将其用作调试/发布 开关。然而,这样做会很奇怪:接口(interface)(包含的 .h 文件)不应在 releasedebug 之间改变。如果您需要这个,通常的方法是使用定义启用/禁用代码的某些部分,主要在 .c(和 .cpp)文件中。

关于c++ - 我可以在#include 指令中使用预处理器变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256428/

相关文章:

c++ - 为什么 std::deque 子数组大小是固定的?

c++ - 交换两个完整的 vector/队列/堆栈时间成本?

c++ - 向句柄包装器添加功能

c++ - std::make_from_tuple 在没有构造函数的情况下无法编译

c++ - 如何跟踪进程创建的 ActiveX 控件?

c++ - 在头文件中使用命名空间时的多重定义

c++ - 未解析的外部符号 D3DXSaveSurfaceToFileW

C++ 应用程序不会终止

c++ - 不可能的堆栈跟踪?尽管已检查,但使用this = nullptr的访问冲突

c++ - 使用 libxml 解析 xml 文件时删除注释