在宏中使用三元运算符

Gin*_*hta 2 c macros ternary-operator

我正在尝试将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));
Run Code Online (Sandbox Code Playgroud)

jyv*_*vet 5

你这里有几个错误.

  • 您无法使用,#if因为预处理器不知道您将输入的字符.
  • ||在宏中使用TEST而不是&&
  • 在括号中的错误SMALLCASEUPPERCASE宏(仅一个(而是两个))
  • 删除SMALLCASEUPPERCASE宏中的分号
  • 首选使用char值(比如'a')代替其ASCII值(例如97)

你能做什么呢:

#define SMALLCASE(X) (((X)>='a') && ((X)<='z'))
#define UPPERCASE(X) (((X)>='A') && ((X)<='Z'))
#define TEST(X) ((SMALLCASE(X)) || (UPPERCASE(X)))

/*in main() after reading character*/
if (TEST(ch)) {
    printf("Entered character is an alphabet\n");
} else {
    printf("Entered character isn't an alphabet\n");
}
Run Code Online (Sandbox Code Playgroud)