Tag: 编译器警告

MSVC-Wall中标准头文件中有几千个警告是怎么回事?

有些人似乎build议你使用-Wall,但是当我在一个只包含main.cpp的小testing项目上做的时候,我得到了5800个警告,其中大部分是标准头文件或windows头文件。 那是有意的行为? 我怎样才能使我的编译警告免费? 这里只是一些阅读乐趣: 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' bytes padding added after […]

正在使用#pragma警告推/popup正确的方式来临时改变警告级别?

偶尔很难编写不会发出警告的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 ) 我在第二个版本中看到的问题是,它放弃了最初的警告级别 – 在此之前警告可能已经closures,或者它的警告级别可能已经被改变。 使用default会放弃这些改变。 第一种方法看起来很干净。 有没有问题呢? […]

财产获得者和制定者

有了这个简单的类,我得到的编译器警告“试图修改/访问'在自己的setter / getter”x“,当我这样使用它: var p: point = Point() px = 12 我得到一个EXC_BAD_ACCESS。 我怎样才能做到这一点没有明确的支持ivars? class Point { var x: Int { set { x = newValue * 2 //Error } get { return x / 2 //Error } } // … }

如何故意导致自定义的java编译器警告消息?

我正在做一个丑陋的临时黑客,以解决一个阻塞问题,而我们等待一个外部资源被修复。 除了用一个大的吓人的评论和一堆FIXMEs来标记,我很想让编译器提醒一个明显的警告信息,所以我们不要忘记把它写出来。 例如,像这样的东西: [javac] com.foo.Hacky.java:192: warning: FIXME temporary hack to work around library bug, remove me when library is fixed! 有没有一种方法,我可以导致一个故意的编译器警告与我select的消息? 如果做不到这一点,那么添加到代码中的最简单的东西就是抛出一个已经存在的警告,在违规行中可能会有一个string中的消息,这样就会在警告消息中打印出来? 编辑:过时的标签似乎没有为我做任何事情: /** * @deprecated "Temporary hack to work around remote server quirks" */ @Deprecated private void doSomeHackyStuff() { … } eclipse中没有编译器或运行时错误,或者来自Sun的javac 1.6(从ant脚本运行),它肯定会执行这个函数。

Java Class.cast()与cast操作符

在我的C ++日子里教过关于C风格演员操作符的邪恶之后,我很高兴地首先发现,在Java 5中, java.lang.Class已经获得了一个cast方法。 我想最后我们有一个OO的方式处理铸造。 原来, Class.cast与C ++中的static_cast 。 这更像reinterpret_cast 。 它不会在预期的地方产生编译错误,而是会延迟到运行时。 这是一个简单的testing用例来演示不同的行为。 package test; import static org.junit.Assert.assertTrue; import org.junit.Test; public class TestCast { static final class Foo { } static class Bar { } static final class BarSubclass extends Bar { } @Test public void test ( ) { final Foo foo = new […]

macros名称的有效字符是什么?

C风格的macros名称是否与标识符具有相同的命名规则? 在编译器升级之后,它现在正在为传统应用程序发出这个警告: warning #3649-D: white space is required between the macro name "CHAR_" and its replacement text #define CHAR_& 38 这行代码为&符号定义了一个ASCII值常量。 #define DOL_SN 36 #define PERCENT 37 #define CHAR_& 38 #define RT_SING 39 #define LF_PAR 40 我认为这个定义(实际上没有被任何代码引用)是错误的,应该改成类似“CHAR_AMPERSAND”的东西?

Java中有效的@SuppressWarnings警告名称列表是什么?

Java中有效的@SuppressWarnings警告名称列表是什么? ("")在@SuppressWarnings("") 。

多字符常量警告

为什么这是一个警告? 我认为有很多情况下更清楚地使用多字符int常量而不是“无意义”的数字,而不是定义具有相同值的常量variables。 当parsingwave / tiff /其他文件types比较清楚地将读取值与一些“EVAW”,“数据”等进行比较而不是相应的值。 示例代码: int waveHeader = 'EVAW'; 为什么会发出警告?

自定义编译器警告

在.Net中使用ObsoleteAtribute时,它会给你提供编译器警告,告诉你对象/方法/属性已经过时,应该使用别的东西。 我目前正在做一个项目,需要大量的重构前员工代码。 我想写一个自定义属性,我可以用它来标记方法或属性,这些方法或属性会产生编写警告,给我写的消息。 像这样的东西 [MyAttribute("This code sux and should be looked at")] public sub DoEverything(){} 我想要这个产生一个编译器警告,说:“这个代码sux,应该看看”。 我知道如何创build一个自定义属性,问题是如何导致它在Visual Studio中生成编译器警告。

警告:隐式函数声明

我的编译器(GCC)给了我警告: 警告:隐式函数声明 请帮我理解为什么会这样。