Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为匿名命名空间中未引用的本地函数生成警告? 根据您读取的C++标准,它可能包含在未命名的命名空间:7./P>的7.3.1节中的注释。_C++_Visual C++_C++11_Compiler Warnings_Visual C++ 2012 - Fatal编程技术网

如何为匿名命名空间中未引用的本地函数生成警告? 根据您读取的C++标准,它可能包含在未命名的命名空间:7./P>的7.3.1节中的注释。

如何为匿名命名空间中未引用的本地函数生成警告? 根据您读取的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节中的注释。

使用/Wall,编译器报告

警告C4505:“unusedFunction2”:未引用的本地函数 被移除

对于静态函数unusedFunction2()。但对于unusedFunction1(),它不报告任何内容

似乎在匿名名称空间中包含本地函数会抑制未引用的本地函数警告,这对我来说是一个意外和不愉快的副作用


有没有方法在匿名命名空间中生成未引用的本地函数的警告,无论是用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()的警告。