如何为匿名命名空间中未引用的本地函数生成警告? 根据您读取的C++标准,它可能包含在未命名的命名空间:7./P>的7.3.1节中的注释。
使用/Wall,编译器报告 警告C4505:“unusedFunction2”:未引用的本地函数 被移除 对于静态函数unusedFunction2()。但对于unusedFunction1(),它不报告任何内容 似乎在匿名名称空间中包含本地函数会抑制未引用的本地函数警告,这对我来说是一个意外和不愉快的副作用如何为匿名命名空间中未引用的本地函数生成警告? 根据您读取的C++标准,它可能包含在未命名的命名空间:7./P>的7.3.1节中的注释。,c++,visual-c++,c++11,compiler-warnings,visual-c++-2012,C++,Visual C++,C++11,Compiler Warnings,Visual C++ 2012,使用/Wall,编译器报告 警告C4505:“unusedFunction2”:未引用的本地函数 被移除 对于静态函数unusedFunction2()。但对于unusedFunction1(),它不报告任何内容 似乎在匿名名称空间中包含本地函数会抑制未引用的本地函数警告,这对我来说是一个意外和不愉快的副作用 有没有方法在匿名命名空间中生成未引用的本地函数的警告,无论是用MSVC还是其他C++编译器?< P>根据您读取的C++标准,它可能包含在未命名的命名空间:7./P>的7.3.1节中的注释。
有没有方法在匿名命名空间中生成未引用的本地函数的警告,无论是用MSVC还是其他C++编译器?
< P>根据您读取的C++标准,它可能包含在未命名的命名空间:7./P>的7.3.1节中的注释。 “尽管未命名名称空间中的实体可能具有外部链接,但它们实际上是由其翻译单元特有的名称限定的,因此从任何其他翻译单元中都看不到。” 这意味着编译器可以生成带有外部链接的匿名命名空间符号。检查.obj文件,这实际上就是MSVC使用“unusedFunction1”所做的:dumpbin /symbols a.obj | findstr "unusedFunction"
1345 00003B20 SECT1B notype () External | ?unusedFunction1@?A0xd43c5f4a@@YAXXZ (void __cdecl `anonymous namespace'::unusedFunction1(void))
由于函数具有外部链接,编译器无法知道它是否被其他编译单元使用,因此不会抛出警告。其他编译器似乎在使用内部链接方面做出了更好的选择。如果您将unusedFunction1
静态void unusedFunction1()
FYI gcc和clang设置为警告:警告:“void{anonymous}::unusedFunction1()”已定义但未使用[-Wunused function]
@drescherjm如果我添加了“static”对于unusedFunction1(),它将生成一条警告,指出“`匿名名称空间'::unusedFunction1:未引用的本地函数已被删除”。然而,我尝试使用匿名名称空间的原因是为了替换静态修饰符。在匿名名称空间中使用“静态”函数没有多大意义。@ChrisDrew谢谢你,Chris。我很高兴知道gcc和clang都为此发出了警告。也许我应该测试VS2013,看看它是否也会生成警告…@ChrisDrew我刚刚尝试了VS2013,但它也无法报告unusedFunction1()的警告。