【问题标题】:How to define value for C++ preprocessor directives during compile time?如何在编译期间定义 C++ 预处理器指令的值?
【发布时间】:2020-06-18 22:00:06
【问题描述】:

假设我有以下代码:

int main() {

#ifdef NEWMETHOD
    val = new_method("hello world!");
#else
    val = old_method("hello world!");
#endif

    return 0;
}

如何在编译时定义 NEWMETHOD?

【问题讨论】:

  • 大多数编译器会使用-D 来定义宏:g++ -DNEWMETHOD yourfile.cpp

标签: c++ c-preprocessor


【解决方案1】:

你可以

  • 通过插入来定义它

    #define NEWMETHOD
    

    在使用之前进入源代码或

  • -DNEWMETHOD 添加到您的编译器调用(适用于所有流行的编译器,包括 GCC、clang 和 MSVC)。

    根据您的构建系统,您可能希望将其添加到 CFLAGS (C) 或 CXXFLAGS (C++) 环境变量中。

【讨论】:

    【解决方案2】:

    你只需要写

    #define NEWMETHOD
    

    在您进行#ifdef 检查之前。

    当然,那你一开始就不需要写#ifdef

    如果你想在不改变源代码的情况下定义宏,你可以在编译时用-D标志传入,像这样:

    g++ -DNEWMETHOD main.cpp
    

    显然,替换特定的编译器命令和文件名。

    【讨论】:

    • 写在哪里?在什么条件下?这说明不了什么。
    • 但你没有。如果您可以将定义直接放在条件之上,则该条件可能完全没有意义,应该将其删除。相反,其他选项(如编译器标志)更有可能有用。有时保持一个“开关”是有用的,即使它就在那里,但有必要解释一下这些场合可能是什么。
    • @AsteroidsWithWings 也是如此,添加了建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多