例如:
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中,它会给出错误
错误:参数名称省略
当前回答
我看到有人使用这种风格:
if (when || who || format || data || len);
其他回答
为了记录,我喜欢Job的答案,但我对一个解决方案很好奇,只是在“什么都不做”的语句中使用变量名:
void foo(int x) {
x; /* unused */
...
}
当然,这也有缺点;例如,如果没有“未使用”注释,它看起来就像一个错误,而不是有意的代码行。
这样做的好处是不需要DEFINE,并且消除了警告。
您可以使用GCC或Clang的未使用属性。然而,我在头文件中使用这些宏来避免在源代码中到处都有GCC特定的属性,而且到处都有__attribute__有点啰嗦/丑陋。
#ifdef __GNUC__
# define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
#else
# define UNUSED(x) UNUSED_ ## x
#endif
#ifdef __GNUC__
# define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x
#else
# define UNUSED_FUNCTION(x) UNUSED_ ## x
#endif
然后你就可以……
void foo(int UNUSED(bar)) { ... }
我更喜欢这个,因为如果你在代码中任何地方尝试使用bar,你都会得到一个错误,所以你不能错误地留下这个属性。
对于函数…
static void UNUSED_FUNCTION(foo)(int bar) { ... }
注1):
据我所知,MSVC没有等价的__attribute__((__unused__))。
注2):
未使用的宏对包含括号的参数不起作用, 如果你有一个参数,比如float (* coordinates)[3],你不能这样做, 浮动未使用((*坐标)[3])或浮动(*未使用(坐标))[3]。这是我迄今为止发现的未使用宏的唯一缺点,在这些情况下,我回到(void)坐标;。
看到它被标记为gcc,您可以使用命令行开关Wno-unused-parameter。
例如:
gcc -Wno-unused-parameter test.c
当然,这会影响整个文件(可能项目取决于你在哪里设置开关),但你不需要改变任何代码。
在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了,但是他们压制了不影响结果的超学究警告。
使用GCC的未使用属性:
int foo (__attribute__((unused)) int bar) {
return 0;
}