如何定义一个测试给定字符是否为元音的宏?

Cap*_*nci 4 c macros

下面的代码片段没有给出编译错误,但它也没有给出预期的输出,虽然这可以用简单的if-else方式完成,但我想用宏来做.这c是一个字符变量.

#define VOWELS 'a' || 'e' || 'i' || 'o' || 'u' || 'A' || 'E' || 'I' || 'O' || '
if (c == VOWELS) {
   printf("vowel = %c\n", c);
}


Run Code Online (Sandbox Code Playgroud)

Gov*_*mar 7

这是因为除了VOWELS宏中最左边的值之外的所有值都没有被测试c.宏扩展到的是:

c == 'a' || 'e' || ...
Run Code Online (Sandbox Code Playgroud)

所以基本上,因为'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')
Run Code Online (Sandbox Code Playgroud)

然后,你只需使用:

if(VOWEL(c))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)