这是因为除了VOWELS
宏中最左边的值之外的所有值都没有被测试c
.宏扩展到的是:
c == 'a' || 'e' || ...
所以基本上,因为'e'
正在测试非零表达式(即,字符的数值),所以总是求值为1
.
宏应该是什么:
#define VOWEL(c) ((c) == 'a') || ((c) == 'e') || ((c) == 'i') || ((c) == 'o') || ((c) == 'u') || ((c) == 'A') || ((c) == 'E') || ((c) == 'I') || ((c) == 'O') || ((c) == 'U')
然后,你只需使用:
if(VOWEL(c)) { ... }