我使用了这个宏:
#define ISALPHA(text[i]) ('a'<=a && a<= 'z')|| ('A'<=a && a<= 'Z')? ("alpha"):("not alpha")
它给出了这个错误:[错误]“[”可能不会出现在宏参数列表中
。
如何在 C 语言中将数组值作为宏的参数?
最佳答案
您的代码中有多个错误,但标题问题的答案是您在宏参数列表中使用普通名称:
#define ISALPHA(c) ((('a' <= (c) && (c) <= 'z') || \
('A' <= (c) && (c) <= 'Z')) ? "alpha" : "not alpha")
然后,您可以使用以下方法在数组元素上调用宏:
ISALPHA(text[i])
请注意宏中括号的广泛使用,以避免奇怪的宏参数出现问题。
不过,比所有测试要好得多的是使用标准(区域设置敏感)isalpha()
来自<ctype.h>
的宏:
#define ISALPHA(c) (isalpha(c) ? "alpha" : "not alpha")
您的版本中的错误包括:
- 使用
text[i]
而不是a
在宏参数中。 - 不包含
a
的用途括号内。 - 不将整个宏括在括号内。
- (次要)对于某些代码集,字符是否为字母的测试不准确,例如 EBCDIC用于 IBM 大型机。
将字符串括在括号中是不必要的,但不会造成任何麻烦。
我选择使用c
作为“性格”的助记符是风格或个人偏好;使用a
一致(大概是“字母”)也可以。
关于c - 将数组作为宏参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44856225/