例如:
Bool NullFunc(const struct timespec *when, const char *who)
{
return TRUE;
}
在c++中,我可以把/*…*/注释参数。当然不是在C中,它会给出错误
错误:参数名称省略
例如:
Bool NullFunc(const struct timespec *when, const char *who)
{
return TRUE;
}
在c++中,我可以把/*…*/注释参数。当然不是在C中,它会给出错误
错误:参数名称省略
当前回答
为了记录,我喜欢Job的答案,但我对一个解决方案很好奇,只是在“什么都不做”的语句中使用变量名:
void foo(int x) {
x; /* unused */
...
}
当然,这也有缺点;例如,如果没有“未使用”注释,它看起来就像一个错误,而不是有意的代码行。
这样做的好处是不需要DEFINE,并且消除了警告。
其他回答
我看到有人使用这种风格:
if (when || who || format || data || len);
给属性加标签是一种理想的方法。MACRO有时会导致混乱。 通过使用void(x),我们在处理过程中增加了开销。
如果不使用input参数,则使用
void foo(int __attribute__((unused))key)
{
}
如果没有使用函数中定义的变量
void foo(int key)
{
int hash = 0;
int bkt __attribute__((unused)) = 0;
api_call(x, hash, bkt);
}
稍后使用哈希变量作为逻辑,但不需要bkt。定义BKT为未使用,否则编译器说“BKT设置bt未使用”。
注意:这只是为了抑制警告,而不是为了优化。
在MSVC中,要抑制特定的警告,只需将它的编号指定为/wd#就足够了。我的CMakeLists.txt包含这样的块:
If (MSVC)
Set (CMAKE_EXE_LINKER_FLAGS "$ {CMAKE_EXE_LINKER_FLAGS} / NODEFAULTLIB: LIBCMT")
Add_definitions (/W4 /wd4512 /wd4702 /wd4100 /wd4510 /wd4355 /wd4127)
Add_definitions (/D_CRT_SECURE_NO_WARNINGS)
Elseif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUC)
Add_definitions (-Wall -W -pedantic)
Else ()
Message ("Unknown compiler")
Endif ()
现在我说不出/wd4512 /wd4702 /wd4100 /wd4510 /wd4355 /wd4127到底是什么意思,因为我已经三年没有关注MSVC了,但是他们压制了不影响结果的超学究警告。
为了记录,我喜欢Job的答案,但我对一个解决方案很好奇,只是在“什么都不做”的语句中使用变量名:
void foo(int x) {
x; /* unused */
...
}
当然,这也有缺点;例如,如果没有“未使用”注释,它看起来就像一个错误,而不是有意的代码行。
这样做的好处是不需要DEFINE,并且消除了警告。
我也有同样的问题。我使用了第三方库。当我编译这个库时,编译器(gcc/clang)将报错未使用的变量。
像这样
test.cpp:29:11:警告:变量'magic'设置但未使用[- wunused but-set-variable] 短魔术[]= { test.cpp:84:17:警告:未使用的变量'before_write' [-Wunused-variable] int64_t before_write = Thread::currentTimeMillis();
所以解决方案很清楚。添加-Wno-unused作为gcc/clang CFLAG将抑制所有“unused”警告,即使你有-Wall set。
通过这种方式,您不需要更改任何代码。