17

以下定义语句在 C 中是否有效?

#define TRUE FALSE
4

2 回答 2

32

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

#define TRUE FALSE

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

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

于 2013-09-19T12:11:45.880 回答
4

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

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

#define FALSE 0
#define TRUE !FALSE
于 2013-09-19T12:12:31.960 回答