【发布时间】:2014-11-14 21:21:02
【问题描述】:
我有一个宏定义如下:
#define UNREF_PARAM_1(a)
do { \
(void)sizeof(a); \
} \
while (0)
摆脱编译器警告。在我正在进行的一个新项目中,VS2013 突然再次抱怨未引用的形式参数。
奇怪的是,如果我只使用(void)param,它确实有效。
有人知道为什么它在与(void)sizeof(param) 一起使用时不起作用吗?
【问题讨论】:
-
sizeof在编译时进行评估。 -
我通常会避免使用此类宏,因为随着时间的推移代码会发生变化,人们会忘记删除它们。我的偏好是在函数头中注释掉参数的名称,这样会抑制警告,并且在不更新代码的情况下无法开始使用参数。
-
我将这个宏用于调试构建,我希望某些函数什么都不做,并且不会收到有关未引用参数的警告。现在我在 (void)sizeof(a); 之前添加了一个 __pragma(warning(suppress:4100));说明
标签: c++ visual-studio language-lawyer compiler-warnings suppress-warnings