在C中定义宏将无法正常工作

Spi*_*ire 1 c macros

我正在尝试在C中创建一个宏,它可以判断char是否为十六进制数(0-9 az AZ)

#define _hex(x) (((x) >= "0" && (x) <= "9" )||( (x) >= "a" && (x) <= "z") || ((x) >= "A" && (x) <= "Z") ? "true" : "false")
Run Code Online (Sandbox Code Playgroud)

这是我提出的,但它不适用于这样的循环

char a;
     for(a = "a" ; a < "z";a++){
        printf("%s  => %s",a, _hex(a));
     }
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误

test.c:8: warning: assignment makes integer from pointer without a cast
test.c:8: warning: comparison between pointer and integer
test.c:9: warning: comparison between pointer and integer
test.c:9: warning: comparison between pointer and integer
test.c:9: warning: comparison between pointer and integer
test.c:9: warning: comparison between pointer and integer
test.c:9: warning: comparison between pointer and integer
test.c:9: warning: comparison between pointer and integer
Run Code Online (Sandbox Code Playgroud)

vir*_*tor 9

"a"是指向字符串"a"的指针.您想要将char与'a'进行比较.

#define _hex(x) (((x) >= '0' && (x) <= '9' )||( (x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') ? "true" : "false")
Run Code Online (Sandbox Code Playgroud)

但您也可以使用isalnum(x)- 如果字符是数字或字符,则返回true.

或者,isxdigit(x)如果真的应该是十六进制检查.