我在一本编程书中看到了以下宏定义。
#define TRUE '/'/'/'
#define FALSE '-'-'-'
那里没有解释。
请向我解释这些将如何作为 TRUE
和 FALSE
工作。
我们看:'/'/'/'
表示char
字面量/
,除以char
文字 '/'
本身。结果是 1,这对于 TRUE
来说是合理的。
而 '-' - '-'
表示 char
文字 '-'
,从自身中减去。这是零(FALSE
)。
这样做有两个问题:首先,它不可读。使用 1
和 0
绝对更好。此外,正如 TartanLlama 和 KerrekSB 所指出的,如果您打算使用该定义,请在它们周围添加括号,这样您就不会感到意外:
#include <stdio.h>
#define TRUE '/'/'/'
#define FALSE '-'-'-'
int main() {
printf ("%d\n", 2 * FALSE);
return 0;
}
这将打印 char
文字 '-'
的值(在我的系统上为 45)。
带括号:
#define TRUE ('/'/'/')
#define FALSE ('-'-'-')
程序正确打印零,即使将真值乘以整数没有多大意义,但这只是一种意外错误的示例,如果你不给宏加上括号,可能会咬你.
我是一名优秀的程序员,十分优秀!