【问题标题】:C- Preprocessor defining a macro [duplicate]C-定义宏的预处理器[重复]
【发布时间】:2014-12-11 10:47:36
【问题描述】:

您好,我在定义依赖于变量的宏时需要帮助。 例如:

#if TEMP
   #define COUNT  5
#else
   #define COUNT  6
#endif

TEMP 将在函数中设置。 例如:

void func()
{
    TEMP = 1;
}

设置 count 宏和定义 temp 在不同的文件中。

谁能帮我解决这个问题?

TIA 苏米亚

【问题讨论】:

  • defines 用于“预处理器”。
  • 你不能像普通变量一样设置预处理器宏,尤其是运行时。在实际编译器之前,预处理器作为编译过程中的一个单独步骤运行。
  • 为什么将 COUNT 定义为宏而不是变量?顺便说一句,您不能将变量名放在 define 预处理器命令中。
  • 无意冒犯,但您显然不知道自己在做什么。我建议您忘记预处理器和#define,并尝试使用变量bool temp = false; int count = temp ? 5 : 6; ... temp = true; 等。如果您有理由不这样做,请分享。
  • 托尼,Count 不是整数。它实际上是根据 TEMP 启用和禁用 gpio。所以我不能使用 bool 类型。

标签: c++ c c-preprocessor


【解决方案1】:

这是不可能的。 TEMP 只会在运行时设置,不可用于预处理。如果您需要 COUNT5,您可以使用 -DTEMP 作为编译器标志来定义它。您必须将代码更改为以下内容:

#ifdef TEMP
  #define COUNT 5
#else
  #define COUNT 6
#endif

【讨论】:

  • 我希望我的应用程序根据变量 TEMP 来决定 COUNT 值。谢谢大家的回复。
  • 这就是它的作用。如果定义了TEMP,则COUNT 等于5,否则COUNT 等于6。如果您的意思是希望COUNT 的值依赖于TEMP 的值,您应该看看gcc 是否支持那个。
  • 我是一名嵌入式开发人员。在应用程序中,变量 TEMP 将在运行期间通过读取 gpio 引脚来设置。不能设置TEMP和定义宏吗?
  • 啊,在那种情况下,我担心这个解决方案行不通,请查看上面@Tony-D 的评论。基本上COUNT 应该是一个变量/函数而不是一个已定义的常量。
【解决方案2】:

这是不可能的。宏在编译期间被解析,因此设置变量等运行时更改不会影响它们。

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 2019-05-13
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多