我有以下代码,当我试图编译它时,会得到一个错误:
错误:“列表项”没有名为“state”的成员
有什么创造性的想法可以让这段代码在没有警告和错误的情况下编译吗?
#if defined (_DEBUG_)
#define ASSERT assert
#else /* _DEBUG_ */
#define ASSERT( exp ) ((void)(exp))
#endif`
typedef struct list_item {
struct list_item *p_next;
struct list_item *p_prev;
#ifdef _DEBUG_
int state;
#endif
} list_item_t;
main(int argc, char *argv)
{
list_item_t p_list_item;
ASSERT(p_list_item.state == 0);
}
最佳答案
只是作为
#if defined (_DEBUG_)
#define ASSERT assert
#else
#define ASSERT( exp ) (void)0
#endif
请注意,这可能会改变其他代码点的行为,因为
#define
不再计算其参数,但这就是人们希望其行为的方式。或者执行
ASSERT
构建,但这并不能解决问题,它只是避免了问题。关于c - 没有成员编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6641538/