Questions tagged «compiler-warnings»

编译器发出的消息,指示代码或配置中的潜在问题。


10
如何摆脱Xcode中的“未使用变量”警告?
我完全理解为什么会发生未使用的变量警告。我一般不想抑制它们,因为它们在大多数情况下都非常有用。但是,请考虑以下(伪造的)代码。 NSError *error = nil; BOOL saved = [moc save:&error]; NSAssert1(saved, @"Dude!!1! %@!!!", error); Xcode报告这saved是一个未使用的变量,当然不是。我怀疑这是因为NSAssert1是宏。该NS_BLOCK_ASSERTIONS宏没有定义,那么目标C断言肯定启用。 尽管它没有任何伤害,但我发现它不整洁和令人讨厌,并且我想抑制它,但是我不确定该怎么做。将变量分配给自身可以摆脱编译器警告,但是如果存在这种情况,我宁愿以“正确”的方式进行操作。


9
如何禁用我不想编辑的第三方代码中来自gcc的未使用的变量警告?
我想知道您传递给gcc编译器的哪些开关可以关闭未使用的变量警告?我在Windows上的增强功能中遇到错误,并且我不想触摸增强功能代码: C:\boost_1_52_0/boost/system/error_code.hpp: At global scope: C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable] 我尝试同时使用两者-Wunused-value,-Wno-unused-value但都没有抑制上面的消息。 正确的命令是什么,这是我的编译行: g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion -Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated -IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE …


6
Visual Studio警告级别的含义?
在Web应用程序项目的“构建”选项卡上,我有一个名为“警告级别”的设置。我可以在0到4之间设置一个值。这些值是什么意思?值0会更严格并生成更多警告吗,反之亦然?我还没有找到任何文档,但是也许我找错了地方。

4
有选择地仅对翻译单元的一部分禁用GCC警告吗?
与此MSVC预处理程序代码最接近的GCC是什么? #pragma warning( push ) // Save the current warning state. #pragma warning( disable : 4723 ) // C4723: potential divide by 0 // Code which would generate warning 4723. #pragma warning( pop ) // Restore warnings to previous state. 我们在通常包含的标头中有代码,我们不想生成特定的警告。但是,我们希望包含那些标题的文件继续生成该警告(如果项目启用了该警告)。

11
如何故意导致自定义Java编译器警告消息?
我将提交一个丑陋的临时hack,以便在我们等待外部资源修复时解决阻塞问题。除了用一个可怕的注释和大量的FIXME标记它之外,我还希望编译器抛出明显的警告消息作为提醒,所以我们不要忘记将其删除。例如,类似: [javac] com.foo.Hacky.java:192: warning: FIXME temporary hack to work around library bug, remove me when library is fixed! 有没有一种方法可以通过我选择的消息引起故意的编译器警告?失败了,最容易添加到代码中以引发现有警告的东西是什么,可能是在违规行上的字符串中显示了一条消息,以便将其打印在警告消息中? 编辑:不推荐使用的标签似乎对我没有任何帮助: /** * @deprecated "Temporary hack to work around remote server quirks" */ @Deprecated private void doSomeHackyStuff() { ... } 在eclipse或sun javac 1.6(从ant脚本运行)中,没有编译器或运行时错误,并且肯定是在执行该功能。

7
是否使用#pragma警告推送/弹出来临时更改警告级别的正确方法?
有时很难编写完全不会发出警告的C ++代码。但是,启用警告是一个好主意。因此,通常有必要禁用某些特定构造周围的警告,并在所有其他代码段中启用警告。 到目前为止,我已经看到了两种方法。 第一个是使用#pragma warning( push )和#pragma warning( pop ): #pragma warning( push ) #pragma warning( disable: ThatWarning ) //code with ThatWarning here #pragma warning( pop ) 第二种是使用#pragma warning( default ): #pragma warning( disable: ThatWarning ) //code with ThatWarning here #pragma warning( default: ThatWarning ) 我在第二个变体中看到的问题是它丢弃了原始警告级别-警告可能在此之前已关闭,或者其警告级别可能已更改。使用default将丢弃这些更改。 第一种方法看起来很干净。有什么问题吗?有没有更好的方法可以达到相同目的?

3
是否存在static_warning?
我知道这个问题提到了Boost的“ STATIC WARNING”,但是我想再次提一个问题,特别是我如何实现一个static_warning操作类似于a的操作,static_assert但仅在编译时发出警告,而不是中止编译错误。 我想要类似于Alexandrescu提出的在C ++ 11之前的静态断言的提议,该提议以某种方式设法打印了一些有用的上下文信息作为错误的一部分。 要求用户启用某些标准的编译器警告以使此构造起作用(可能是“无效的指针转换”或“违反严格的别名规则”),这是可以接受的-无论如何,任何应作为常规编译一部分的警告都可以使用。 简而言之,我想static_warning(false, "Hello world");创建一个编译器警告,该警告应以某种方式在警告消息中包含字符串“ hello world”。在GCC和MSVC中,这可能吗?如何? 对于任何特别聪明的解决方案,我都会很高兴地给予小额奖励。 作为一点解释:在考虑这个问题时,我想到了一个主意:静态警告将是跟踪复杂模板专业化的编译时过程的有用方法,否则很难调试。静态警告可以用作编译器发出“我正在编译这部分代码”的简单信标。 更新。理想情况下,将在以下设置中触发警告: template <typename T> struct Foo { static_warning(std::is_pointer<T>::value, "Attempting to use pointer type."); // ... }; int main() { Foo<int> a; Foo<int*> b; }

4
从框架禁用Xcode中的警告
我已将three20项目导入到我的项目中,当我使用iOS 5升级到Xcode 4.2时,项目中出现了一系列警告。 我不在乎它们,但是它们会发出很多噪音,现在很容易错过我项目中的任何实际警告。有没有一种方法可以为那些特定的库禁用警告?

4
使用LLVM / Clang忽略特定文件中的所有警告
我的iOS项目中有一些带有警告的文件,我想忽略这些警告。我不想禁用整个项目中的警告(不知道如何执行此操作),仅禁用某些特定文件。因此,有没有一种方法可以完全忽略特定文件中的所有警告? 我在Xcode 4.2上使用LLVM 3.0和Clang。

6
MSVC -Wall中标准标头中的数千条警告是怎么回事?
有人似乎建议您使用-Wall,但是当我在一个只有main.cpp并包含一些包含项的小型测试项目上进行操作时,我在标准标头或Windows标头中收到5800条警告。 那是预期的行为吗?我该如何免费发布编译警告? 以下是一些阅读乐趣: 1>c:\program files\microsoft visual studio 10.0\vc\include\stdint.h(105): warning C4668: '_INTPTR' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' 1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(109): warning C4820: '_wfinddata64i32_t' : '4' bytes padding added after data member '_wfinddata64i32_t::attrib' 1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(114): warning C4820: '_wfinddata64i32_t' : '4' …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.