gpt4 book ai didi

c++ - if 宏中的语句不起作用

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

我对宏中的 if 语句感到困惑。这是我的代码:

#ifdef SHOW_LOGS_
#define LOG(operation, parameter, value) \
do { \
if ((parameter) == (NULL)){ \
fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,operation);\
}else { \
fprintf(stderr,"%s:%d: %s, [%s] : %d\n",__FILE__,__LINE__,operation,parameter,value);\
} \
} while(0)
#else
#define LOG
#endif

但是,当我像这样测试我的代码时:

LOG("ROUNDING UP...",NULL,NULL);

编译器给了我一个警告,告诉我上面的测试代码开始执行

fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,operation);

不是正确的。所以 if 语句不起作用。

这是另一个例子:

#define TEST_EQ_BASE(equality,expect,actual,format) \
do { \
test_count++; \
if (equality){ \
test_pass++;\
}else{ \
main_ret = 1; \
fprintf(stderr,"%s:%d: expect: " format " actual: " format "\n",__FILE__,__LINE__,expect,actual);\
} \
}while (0)

在此代码中,if 语句有效。

我对此很困惑,为什么会有差异?

谢谢!

编辑:

不好意思各位,我是大三学生,对宏不是很熟悉,不好意思。

我检查了结果,if 语句确实有效,但编译器仍然报错:

uninitialized.h:88:2: note: in expansion of macro ‘LOG’
LOG("__uninitialized_copy_aux: copying without constructor...",NULL,NULL);
^
stl_config.h:53:87: warning: format ‘%d’ expects argument of type ‘int’, but argument 7 has type ‘long int’ [-Wformat=]
fprintf(stderr,"%s:%d: %s, [%s] : %d\n",__FILE__,__LINE__,operation,parameter,value);\

这是输出:

uninitialized.h:88: __uninitialized_copy_aux: copying without constructor...

这是展开的宏:

do { if ((__null) == (__null))
{ fprintf(stderr,"%s:%d: %s, [%s] : %d\n","uninitialized.h",80,"__uninitialized_copy_aux: copying with constructor...",__null,__null); }else
{ fprintf(stderr,"%s:%d: %s\n","uninitialized.h",80,"__uninitialized_copy_aux: copying with constructor..."); } } while(0);

所以我认为问题是当将 NULL 传递给宏时,编译器给出了警告,我可以消除警告吗?

谢谢!!

最佳答案

请再次查看您的代码。

#define LOG(operation, parameter, value) \
do { \
if ((parameter) == (NULL)){ \
fprintf(stderr,"%s:%d: %s, [%s] : %d\n",__FILE__,__LINE__,operation,parameter,value);\
}else { \
fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,operation);\
} \
} while(0)

如果 (parameter) == (NULL),你真的要 fprintf parameter 吗?

尝试改变这一行

if ((parameter) == (NULL)){ \

if ((parameter)){ \

关于c++ - if 宏中的语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41500189/

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