gpt4 book ai didi

c - 将 NULL 作为参数传递给 C 宏

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:15 24 4
gpt4 key购买 nike

我正在尝试定义一个宏 -

#define macro1(arg1) \
do{ \
int _state = 0; \
if (arg1 && arg1->member_) \
_state = arg1->member_->state_; \
printf("%d", _state); \
} while(0)

A *a = new A():
macro1(a); // Works
macro1(NULL); // Error

我看到的具体错误是——

"error: base operand of ‘->’ is not a pointer"

我们不允许将 NULL 作为参数传递给宏吗?

最佳答案

宏扩展只是文本替换,所以当你传入NULL时,它会扩展为NULL->member,显然是错误的。一种方法是为此使用一个临时变量:

#define macro1(arg1) \
do{ \
A* p = (arg1);
int _state = 0; \
if (p && p->member_) \
_state = p->member_->state_; \
printf("%d", _state); \
} while(0)

A *a = new A():
macro1(a);
macro1(NULL);

这样两种情况都会起作用。

关于c - 将 NULL 作为参数传递给 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43905191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com