【问题标题】:Is there anyway to define/run a macro on specific condition in C++?无论如何在 C++ 中的特定条件下定义/运行宏?
【发布时间】:2015-02-21 19:43:22
【问题描述】:

在 C++ 中是否可以在特定条件下定义/运行宏?

我的应用程序在运行时需要一些参数,比如./test -l

如果-l作为参数提供,我想定义一个宏,所以我尝试了:

if  (strcmp(argv [2],"-l")==0)
        #define LOOPBACK

但这是错误的。我的应用程序总是定义LOOPBACK!!

【问题讨论】:

  • 您知道宏是在编译时而不是运行时评估的,对吧?
  • 问题是预处理器运行在单独的phase 中,基本上与C++ 是分开的。它也在构建期间完全完成,并且在运行时不做任何事情。
  • 哎呀,你说得对。谢谢。
  • 为什么这么喜欢宏?它们仅在有限的情况下有用,并且在 c++ 中很少使用
  • 有时你需要使用你的代码4个不同的目的

标签: c++ macros


【解决方案1】:

预处理器宏执行文本替换,然后将预处理器的输出编译为代码。

这意味着,根据定义,宏只能在(严格来说,在编译之前)进行定义、重新定义、取消定义或扩展。宏无法根据运行时数据进行不同的扩展。

这也意味着宏不遵守任何范围规则。

这就是为什么总是定义 LOOPBACK 宏的原因 - 扩展与 if 语句无关。

【讨论】:

    【解决方案2】:

    所有预处理器指令(例如:#include#define、...)都由在编译器之前运行的预处理器执行/评估。因此,您定义的宏是在不知道 if(...) 语句的情况下定义的。

    【讨论】:

      猜你喜欢
      • 2019-09-10
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      相关资源
      最近更新 更多