我在一本编码书中看到了以下宏定义.
#define TRUE '/'/'/'
#define FALSE '-'-'-'
没有任何解释.
请向我解释一下,TRUE
和FALSE
是如何工作的.
我在一本编码书中看到了以下宏定义.
#define TRUE '/'/'/'
#define FALSE '-'-'-'
没有任何解释.
请向我解释一下,TRUE
和FALSE
是如何工作的.
让我们看一下:'/' / '/'
表示char
个文字/
,除以char
个文字'/'
本身.结果是1,这听起来对TRUE
来说是合理的.
'-' - '-'
表示char
和'-'
,从其自身减go .这是零(FALSE
).
这有两个问题:第一,它不可读.使用1
和0
绝对更好.此外,正如塔坦拉玛和凯勒克斯布所指出的,如果你打算使用这个定义,请在它们周围加上括号,这样你就不会有任何惊喜:
#include <stdio.h>
#define TRUE '/'/'/'
#define FALSE '-'-'-'
int main() {
printf ("%d\n", 2 * FALSE);
return 0;
}
这将打印char
个文字'-'
的值(在我的系统上是45).
带括号的:
#define TRUE ('/'/'/')
#define FALSE ('-'-'-')
程序正确地打印零,尽管将真值乘以整数没有多大意义,但这只是一个例子,说明如果不将宏括起来,可能会出现意想不到的错误.