【发布时间】:2016-04-30 15:28:50
【问题描述】:
我正在尝试将 2 个宏模板合并到第三个模板中,以检查输入的字符是否为字母。我试图在前两个宏中使用三元运算符,然后使用#if 指令得出结论,但不断出现一些语法错误。谁能帮帮我?
#define SMALLCASE(X) (X>96&&X<123)?1:2);
#define UPPERCASE(X) (X>64&&X<91)?1:2);
#define TEST(X) (SMALLCASE(X))&&(UPPERCASE(X))
/*in main() after reading character*/
#if TEST(ch)
printf("Entered character is an alphabet");
#else
printf("Entered character isn't an alphabet");
#endif
printf("%d",SMALLCASE(ch));
【问题讨论】:
-
注意你的括号是不平衡的。
-
这里不能使用
#if。使用常规if。更好的是,扔掉所有这些东西并使用if(isalpha(ch))。 -
如果你使用 char 字面量而不是幻数,你的代码就不会那么神秘了。
-
有理由不使用
<ctype.h>中的isalpha()吗? -
@LưuVĩnhPhúc:请注意,
'A'通常是 65(不是 64),'Z'通常是 90;同样,'a'通常是 97,'z'通常是 122。这说明了为什么这些数字是个坏主意!您还需要注意在平等上以正确的方式分支(>= 'a'和<= 'z'等)。
标签: c macros ternary-operator