g ++ -Wall选项包括-Wreorder.该选项的作用如下所述.我不清楚为什么有人会关心(特别是在-Wall中默认打开它).
-Wreorder (C++ only)
Warn when the order of member initializers given in the code does not
match the order in which they must be executed. For instance:
struct A {
int i;
int j;
A(): j (0), i (1) { }
};
The compiler will rearrange the member initializers for i and j to
match the declaration order of the members, emit-ting a warning to that
effect. This warning is enabled by -Wall.
使用myDelegate -= eventHandlerReSharper(版本6)时出现问题:
委托减法具有不可预测的结果
JetBrains在这里解释了这背后的理性.这个解释很有意义,在阅读之后,我怀疑我-对代表的所有用处.
那么如何,
这是简化的代码:
public delegate void MyHandler (object sender);
MyHandler _myEvent;
public event MyHandler MyEvent
{
add
{
_myEvent += value;
DoSomethingElse();
}
remove
{
_myEvent -= value; // <-- ReSharper warning here
}
}
Run Code Online (Sandbox Code Playgroud) 在.Net中使用ObsoleteAtribute时,它会为您提供编译器警告,告诉您对象/方法/属性已过时,应该使用其他东西.我目前正在开发一个需要大量重构前雇员代码的项目.我想编写一个自定义属性,我可以用它来标记将生成编译器警告的方法或属性,这些警告会给出我写的消息.像这样的东西
[MyAttribute("This code sux and should be looked at")]
public void DoEverything()
{
}
Run Code Online (Sandbox Code Playgroud)
<MyAttribute("This code sux and should be looked at")>
Public Sub DoEverything()
End Sub
Run Code Online (Sandbox Code Playgroud)
我想要生成一个编译器警告,上面写着"这段代码sux,应该看一下".我知道如何创建自定义属性,问题是我如何使它在visual studio中生成编译器警告.
在我的C++时代被教授关于C风格演员的邪恶,我很高兴首先发现在Java 5中java.lang.Class已经获得了一种cast方法.
我认为最后我们有一个处理铸造的OO方式.
结果Class.cast与static_castC++不同.它更像是reinterpret_cast.它不会在预期的位置生成编译错误,而是会延迟到运行时.这是一个简单的测试用例,用于演示不同的行为.
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 Foo( );
final Bar bar = new Bar( );
final BarSubclass bar_subclass = new BarSubclass( );
{
final Bar bar_ref = bar;
}
{ …Run Code Online (Sandbox Code Playgroud) 在iPhone应用程序上工作了很长时间后,我意识到我的代码非常脏,包含几个#import和方法,这些方法根本没有被调用或有用.
我想知道是否有任何编译器指令或方法来检测那些无用的代码行.Xcode有没有任何工具可以检测到这个?
我完全理解为什么会出现未使用的变量警告.我不想一般地压制它们,因为它们在大多数情况下非常有用.但是,请考虑以下(人为)代码.
NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
Run Code Online (Sandbox Code Playgroud)
Xcode报告这saved是一个未使用的变量,当然它不是.我怀疑这是因为NSAssert1是一个宏.该NS_BLOCK_ASSERTIONS是宏没有定义,那么目标C断言肯定启用.
虽然它没有伤害任何东西,但我发现它不整洁且烦人,我想压制它,但我不知道该怎么做.将变量分配给自己可以摆脱编译器警告,但如果存在这样的事情,我宁愿以"正确"的方式进行.
我想使用一组全局标志来编译项目,这意味着在我指定的顶级CMakeLists.txt文件中:
ADD_DEFINITIONS ( -Wall -Weffc++ -pedantic -std=c++0x )
Run Code Online (Sandbox Code Playgroud)
但是,对于一个子目录中的特定文件(假设为"foo.cpp"),我想将编译标志切换为不应用-Weffc ++(包含的商业库我无法更改).为了简化只使用-Wall的情况,我试过:
SET_SOURCE_FILES_PROPERTIES( foo.cpp PROPERTIES COMPILE_FLAGS -Wall )
ADD_EXECUTABLE( foo foo.cpp )
Run Code Online (Sandbox Code Playgroud)
,这没用.我也试过了
SET_PROPERTY( SOURCE foo.cpp PROPERTY COMPILE_FLAGS -Wall )
ADD_EXECUTABLE( foo foo.cpp )
Run Code Online (Sandbox Code Playgroud)
和
ADD_EXECUTABLE( foo foo.cpp )
SET_TARGET_PROPERTIES( foo PROPERTIES COMPILE_FLAGS -Wall )
Run Code Online (Sandbox Code Playgroud)
,其中既没有奏效.
最后,我尝试删除这个定义:
REMOVE_DEFINITIONS( -Weffc++ )
ADD_EXECUTABLE( foo foo.cpp )
ADD_DEFINITIONS( -Weffc++ )
Run Code Online (Sandbox Code Playgroud)
,这也没有用(意思是,我得到了很多关于商业图书馆的风格警告).(**注意:如果在构建可执行文件后不重新包含-Weffc ++指令,则会禁止警告.)
我也试过暂时删除编译标志:http: //www.cmake.org/pipermail/cmake/2007-June/014614.html ,但这没有帮助.
对此没有优雅的解决方案吗?
例如,我收到此编译器警告,
永远不会使用"Company.SomeControl.SearchClick"事件.
但是我知道它被使用是因为评论它会引发我20个新的XAML页面警告,试图使用这个事件!
是什么赋予了?有没有办法摆脱这个警告?
问题是在Windows上编译好的相同代码无法在Ubuntu上编译.每次我收到此错误:
cc1: warnings being treated as errors
Run Code Online (Sandbox Code Playgroud)
现在,这是一个很大的代码库,我不喜欢修复所有的警告.
尽管有警告,我还能以任何方式成功编译吗?
在Web应用程序项目的构建选项卡上,我有一个名为"警告级别"的设置.我可以设置0到4之间的值.这些值是什么意思?值0会更严格并产生更多警告,反之亦然?我还没有找到任何关于它的文件,但也许我在找错了地方.