【发布时间】:2020-10-07 17:00:27
【问题描述】:
我想使用 C 中的基本宏来访问 char-Array (*char) Arr 中的某个位 b:
#define TstBit (Arr,b) ( Arr[b/8] & (1 << (b%8)) )
但是在这样的使用情况下:
int foo(const char *charArray) {
int readindex = 0;
[...]
if(TstBit(charArray,readIndex++)) {
我在#define-Statement 行中遇到错误:
main.c | line 7 | error: 'Arr' undeclared (first use in this function)
我怀疑我在调用函数时传递的参数很糟糕,或者#define 需要更多的括号。
【问题讨论】:
-
这个宏的另一个问题是,在你修复了空格之后,
TstBit(charArray, readIndex++)将增加readIndex两次,而且它具有未定义的行为,因为在两者之间没有sequence point二。这是您应该强烈考虑改用函数的众多原因之一(可能使用inline)。 -
@NateEldredge 绝对可以。根本不值得麻烦。
标签: c function parameters macros c-preprocessor