4

'int'から'size_t'への変換で説明されたものと同じ行に沿って、結果の符号が変わる可能性があります-GCC、C 、代わりに、GCC4.2.1で受信する警告にもフラグが付けられるようにします32ビットと64ビットの両方のコンパイルでのVS2008SP1では、VS2008に合わせてGCCでの警告を無効にします。

たとえば、64ビット条件下のGCC 4.2.1では、-Wall条件下での警告として次のように表示されます。

#include <string.h>
bool foo()
{
    size_t len = 0;
    const char * someBuffer = "flubber";
    len = strlen(someBuffer);
    bool retval = false;
    for (int j = 0; j < len; j++) // <-- warning
    {
        if (someBuffer[j] != '0')
        {
            retval = true;
            break;
        }
    }
    return retval;
}

GCCの警告は次のとおりです。

warning: comparison between signed and unsigned integer expressions

ただし、VS2008 SP1 64ビットコンパイラでは、どのタイプのプラグマを試しても、/W3または/W4、または/ w3some_warning_numberまたは/ w4some_warning_numberなどを使用して何を有効にしてもフラグは立てられません。

さて、GCCの警告レベルを下げたり、警告を無効にしたりしたくありません。なぜなら、GCCには非常に正当な理由で警告があったからです。したがって、/ WXが有効になっている場合、VSビルドが同様の方法で失敗するようにしたいと思います。これは私が一緒に暮らさなければならないものですか、それともVS2008でトリックを行う警告がありますか?

編集:警告は、32ビットビルドでは表示されますが、64ビットビルドでは表示されません。以下に示すように、同じコンパイラオプションのセットを使用します。

/O2
/Ob2
/D "WIN32"
/D "_WINDOWS"
/D "NDEBUG"
/D "_CRT_SECURE_NO_WARNINGS"
/D "__WIN32__"
/D "_SCL_SECURE_NO_WARNINGS"
/D "_BIND_TO_CURRENT_MFC_VERSION"
/D "_BIND_TO_CURRENT_CRT_VERSION"
/D "WINVER=0x0502"
/D "_WIN32_WINNT=0x0502"
/D "_WIN32"
/D "_NT"
/D "_CRT_NONSTDC_NO_WARNINGS"
/D "_MBCS"
/FD
/EHsc
/MD
/W3
/WX
/TP
/Zm1000

編集#1:これはVisual Studioの特異性である可能性があるため、Visual C ++ Developer Centerに投稿しました-警告C4018:'<':32ビットでは符号付き/符号なしの不一致が発生しますが、64のVS2008SP1では64ビットのコンパイルでは発生しません-ビットWindows

編集#2: Visual C++開発者センターの投稿内からMicrosoftConnectに投稿するように指示され、今日(2011-01-11)Microsoftは私の質問に回答し、コンパイラの問題として検証しました:問題が追加されると述べました将来のリリースで修正されるバックログへ:Microsoft Connect-警告C4018:'<':署名付き/署名なしの不一致は同じサイズのタイプ間でのみ発生します

4

2 に答える 2

1

何か問題が発生しました。そのコード行は、目的の「警告C4018:'<':符号付き/符号なしの不一致」を生成するはずです。

これらが役立つ場合は、テストプロジェクトのコンパイラ設定を次に示します。

/ Od / D "WIN32" / D "_D​​EBUG" / D "_CONSOLE" / D "_UNICODE" / D "UNICODE" / Gm / EHsc / RTC1 / MDd /Yu"stdafx.h "/Fp" Debug \ testproj1.pch "/ Fo" Debug \ "/ Fd" Debug \ vc90.pdb "/ W3 / nologo / c / ZI / TP / errorReport:prompt

編集:これは32ビットのVisual Studioでテストされたものですが、64ビットのコンパイルについて質問しているので、この情報はあなたには関係ありません。ごめんなさい。

于 2010-12-10T01:29:22.183 に答える
0

私自身の質問に答える:元の質問領域にある私の編集#2を参照してください。現在、Microsoftはコンパイラの問題として認識しています。

于 2011-01-12T00:53:34.460 に答える