Jte*_*llo 17 c c++ gcc gcc-warning
所以我有一些像这样的代码:
void foo (int, int);
void bar ( )
{
//Do Stuff
#if (IMPORTANT == 1)
foo (1, 2);
#endif
}
Run Code Online (Sandbox Code Playgroud)
在没有"重要"的情况下进行编译时,我得到一个编译器警告foo已定义且从未被引用.这让我思考(这就是问题).
所以为了解决这个问题,我只是#if (IMPORTANT == 1)
在功能定义等地方添加了相同内容...以删除警告,然后我开始怀疑是否有不同的方法来抑制该功能的警告.我正在查看"未使用的"GCC attrib并且不知道函数是否具有我可以设置的相同属性?是否还有另一种方法可以抑制它只抑制那个函数而不是文件的警告?
Jon*_*ely 26
我很确定相关的警告选项是这个:
-Wunused-function
每当声明静态函数但未定义静态函数或未使用非内联静态函数时发出警告.-Wall启用此警告.
所以警告只应该给一个static
有趣的功能.说得通.如果函数是static
它只能在当前文件中使用,那么它的定义也必须在此文件中.
并且声明它static inline
可以避免警告,而不需要使用丑陋的宏或特定于编译器的pragma或属性.
Naw*_*waz 25
...然后我开始怀疑是否有一种不同的方法来抑制该功能的警告.
可能存在编译器选项来抑制此警告.但是,一个技巧是:
(void)foo; //cast it to void.
Run Code Online (Sandbox Code Playgroud)
它应该压制这个警告.
你可以写一个宏:
#define SUPPRESS_WARNING(a) (void)a
void foo(int thisIsAlsoAnUnsedParameter, int usedParameter)
{
SUPPRESS_WARNING(foo); //better do this inside the definition itself :D
SUPPRESS_WARNING(thisIsAlsoAnUnsedParameter);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,foo
自身的定义会抑制警告.
Dav*_*men 20
一种解决方案是通过功能属性.
void foo (int, int) __attribute__ ((unused));
Run Code Online (Sandbox Code Playgroud)
这将告诉gcc不要为该函数发出未使用的函数警告foo
.如果您担心可移植性,可以定义一个UNUSED_FUNCTION_ATTRIBUTE
扩展为__attribute__ ((unused))
支持属性的编译器的宏,否则扩展为空.
Tar*_*ama 20
在C++ 17中,您可以使用以下命令声明您的函数[[maybe_unused]]
:
[[maybe_unused]] void foo (int, int);
Run Code Online (Sandbox Code Playgroud)
这将抑制警告,并且是在C++ 17中表达可能未使用的函数的正确的惯用方法.
归档时间: |
|
查看次数: |
21803 次 |
最近记录: |