2008-09-16 6 views
3

Der Visual Studio-Compiler scheint bei signierten/nicht signierten Zuweisungen nur bei Vergleichen zu warnen. Zum Beispiel erzeugt der folgende Code eine Warnung für die if-Anweisung, aber nicht für die anfänglichen Zuweisungen.Machen VS-Compiler signierte/unsigned Zuweisungen?

Gibt es trotzdem, um es zu fangen? Ich bin schon bei W4, dachte aber (gehofft), es könnte irgendwo anders sein.

Danke,

int foo(void) 
{ 
    unsigned int fooUnsigned = 0xffffffff; 
    int fooSigned = fooUnsigned; // no warning 

    if (fooSigned < fooUnsigned) // warning 
    { 
     return 0; 
    } 

    return fooSigned; 
} 

Update:

Quamrana richtig ist, wird dies durch Warn 4365 gesteuert, die standardmäßig aus sein scheint, auch bei W4. Sie können es jedoch für eine bestimmte Warnstufe explizit aktivieren.

#pragma warning (4 : 4365) 

Was ergibt;

warning C4365: 'initializing' : conversion from 'unsigned int' to 'int', signed/unsigned mismatch 
+0

Ich wusste nicht, dass es ein #pragma gab, Warnungen zu aktivieren. Das Problem mit der # Pragma ist, dass es in jedem Modul wiederholt werden muss, wo Sie die Warnung möchten. – quamrana

Antwort

6

Sie müssen die Warnung 4365 aktivieren, um die Zuweisung zu erfassen.

Das könnte schwierig sein - Sie müssen ALLE Warnungen aktivieren - Verwenden Sie/Wall, das viele Warnungen ermöglicht, so dass Sie möglicherweise einige Probleme haben, die Warnung auftreten, aber es tut.

+0

Sie können auch #pragma warning (Standard: 4365) zum Aktivieren verwenden. – ChrisN

0

@quamrana:

C:\Temp>cl /Wall /c foo.c 
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86 
Copyright (C) Microsoft Corporation. All rights reserved. 

foo.c 
foo.c(6) : warning C4018: '<' : signed/unsigned mismatch 

ich sehe, dass Andrew habe es zu arbeiten, aber hat jemand eine Idee, warum es nicht:

Es gibt etwas über die/Wand Option Warnung 4365 aktivieren sein müssen hier arbeiten? Die Visual Studio-Dokumentation zeigt an, dass es sollte, aber ich kann nicht einmal das Beispielprogramm in der Dokumentation abrufen, um die C4365-Warnung zu geben (obwohl es die entsprechende C4245-Warnung gibt - aber das tritt nur mit einer/W4-Option auf) sowieso).

2

Sie können die Stufe einer bestimmten Warnung ändern, indem Sie/W [level] [code] verwenden. In diesem Fall wird/W34365 die Warnung 4365 in eine Warnung der Stufe 3 bringen. Wenn Sie dies häufig tun, können Sie diese Optionen in eine Textdatei einfügen und die @ [file] -Option verwenden, um die Befehlszeile zu vereinfachen.

+0

Das/w muss Kleinbuchstaben sein. –

Verwandte Themen