【发布时间】:2017-09-17 16:04:53
【问题描述】:
我正在尝试定义以下宏:
#define UTF8_2B(c) if((0xc0 & c) == 0xc0){return 1;}
但我遇到了错误:
expected expression before ‘if’
宏是这样调用的:
int i = UTF8_2B(c);
其中 c 是从文件中读取的无符号字符。
为什么会这样?不能在宏中使用 if else 语句吗? 另外,我读到在宏中使用分号不是一个好主意,但我不明白为什么。 我是 c 新手,所以答案越全面越好。
【问题讨论】:
-
如何使用宏? (而且,也许更重要的是:你想实现什么?)
-
显示你调用这个宏的上下文
-
宏做文本替换;你不能直接写
variable = if (condition) …,所以你也不能使用宏。您也缺少 else 值。而return在上下文中完全不合适。请记住:宏是文本替换。预处理后,代码必须是有效的C。 -
不仅如此,连逻辑都错了。
else的情况应该怎么办?