当传递 *customer_num is NULL 时,以下宏会导致段错误。
#define SAVE(a,b,c) if(a){stchar(a,b,c);}
在宏中,有没有一种方法可以检查 a 是否已定义,如果没有,则使用 NULL。 如果我只使用 NULL,该宏就可以工作,如下所示。
SAVE(NULL,buf,16);
1)save_cust(NULL);
2)save_cust(char **customer_number,..etc);
3)SAVE(*customer_number,buf,16); //causes seg fault since it *customer_number is undefined
最佳答案
鉴于此宏
#define SAVE(a,b,c) if(a){stchar(a,b,c);}
以及以下调用
SAVE(*customer_number,buf,16);
预处理器的输出是
if (*customer_number){stchar(*customer_number,buf,16);}
结果是您没有检查 customer_number
是否为 NULL,而是检查 *customer_number
是否为 NULL。当 customer_number
为 NULL 时,检查 *customer_number
会导致 seg_fault。
解决该问题的一种方法是将宏定义为
#define SAVE(a,b,c) if(a){stchar(*a,b,c);}
然后调用宏
SAVE(customer_number,buf,16);
<小时/>
经过进一步审查,我认为您正在寻找的宏是
#define SAVE(a,b,c) if(a && *a){stchar(*a,b,c);}
如果customer_number
实际上是一个指向指针的指针,那么您需要首先验证customer_number
不为NULL,然后验证*customer_number
不为 NULL。
关于c - 使用类函数宏检查变量是否已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25815526/