【问题标题】:Is the preprocessor macro "#define TRUE FALSE'" valid? [closed]预处理器宏“#define TRUE FALSE'”是否有效? [关闭]
【发布时间】:2013-09-19 12:08:08
【问题描述】:

下面的define语句在C语言中有效吗?

#define TRUE FALSE

【问题讨论】:

  • 您应该先尝试一下,然后再问“它会起作用吗?”
  • 一个类似的java恐怖你可能会觉得有趣; thedailywtf.com/Articles/Disgruntled-Bomb-Java-Edition.aspx
  • 我可以理解在询问之前不想尝试这个。我确信它的效果不会渗透到节目结束之后,但它确实有一种惊天动地的外观
  • 看起来有点像define struct union 终极内存保护程序;)
  • 这个问题不应该被否决。

标签: c c-preprocessor


【解决方案1】:

您必须记住,预处理器宏只是简单地替换。如果你这样做,例如

#define TRUE FALSE

然后处理器简单地替换它找到TRUE 的所有位置将被任何FALSE 定义的位置替换。

所以确实这是一个很好的定义。是的,它很可能会以非常意想不到的方式改变程序工作流程,甚至可能导致未定义的行为。

【讨论】:

    【解决方案2】:

    因为我们应该期望 TRUE 已经定义,而 FALSE 也已定义。 所以在这种情况下,这将是一个重新定义并且是无效的。 如果你继续实习,#define TRUE FALSE 对标准是有效的,但根据我能想象的所有逻辑都是无效的。

    但我已经经常看到的一种方式是:

    #define FALSE 0
    #define TRUE !FALSE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多