如何正确定义和使用 C 宏函数中的参数?

How to properly define and use parameters in C macro functions?

我想使用 C 中的基本宏来访问字符数组 (*char) 中的某个位 b Arr:

#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之后的space好像是这里的问题。与 C 编译器不同,预处理器对 spaces 有点挑剔。

对于您的宏,预处理器所做的是用 (Arr,b) 替换所有出现的 TstBit,这不是您的意图。

#define TstBit(Arr,b) ( Arr[b/8] & (1 << (b%8)) )

应该按照你想要的方式工作。

编辑: 另请注意,您尝试使用此宏的方式存在问题,如 !

中所述

宏参数最好没有副作用。如果他们这样做,您应该注意不要导致未定义或意外的行为。