問題タブ [c4127]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
2961 参照

visual-studio-2005 - 奇妙な「警告C4127:条件式は定数です」VS2005

レベル 4 の警告でLightZPngをコンパイルしようとしています。この警告に値しないことが明らかな行で、多くの C4127 が表示されます。例:

#pragma 以外の警告を回避するには、このコードをどのように変更できますか?

0 投票する
2 に答える
3447 参照

c - "while" で定数を使用すると MSVC が警告 C4127 を生成する理由 - C

コードについては、

MSVC は次の警告を生成します。

警告のMSDNfor(;;)ページは、代わりに使用することを提案していますwhile(1)。どのような利点for(;;)があり、なぜそれが常に使用されていることを警告しているのか疑問に思っていwhileます。

同じ警告を得るには、GCC でどのフラグを使用すればよいですか?

0 投票する
2 に答える
5911 参照

c++ - do {} while(false) で C4127 を無効にする方法

重複の可能性:
C/C++: do-while(0); の使用方法 C4127 のようなコンパイラ警告なしで構築しますか?

ご覧のとおり、警告はdo {} while(false).

警告を無効にする次の方法しかわかりません。

しかし、私はこの解決策が好きではありません。

また、これらのマクロを error.h に入れようとしましたが、効果はありませんでした。

この警告を適切な方法で抑制する方法について何かコメントはありますか?

ありがとうございました

0 投票する
2 に答える
4330 参照

c++ - CppUnitは、AssertThrowで例外が発生すると警告C4127でコンパイルされます。

現在、CppUnitを使用してC++で単体テストを作成しています。最近、CppUnitsマクロを使用して、特定のケースで例外がスローされることを確認する必要がありました。

テストのコンパイル中の警告は私を驚かせました(VS2010では、他のコンパイラでも警告になります...):

CppUnitのマクロ定義を調べたところ、次のことがわかりました。

まあ、私はこれがどのように機能するかを完全に理解しています。falseのため、do whileループは1回だけ実行され、breakはAsserter :: fail()部分を実行しないために使用されます。しかし、なぜ彼らはこのようにそれをしているのですか?whileループのブレーク条件は明らかに常に「false」であるため、これは-もちろん-コンパイラの警告をトリガーします。しかし、これを行うためのよりエレガントな方法はありませんか?私は通常、警告なしのコンパイルの原則を順守しているので、これは本当に私を悩ませます。

だから私の質問は本当に、なぜ彼らはそれをこのように実装しなかったのかということです:

前もって感謝します!

-ハンネス

0 投票する
6 に答える
16782 参照

c++ - C4127: 条件式が定数です

次のコードは、Visual Studio 2010 で警告 C4127 (条件式は定数) を生成します (ここで、alias_wchar_t は wchar_t のエイリアスです)。

警告を抑制する以外に、これを解決する最もエレガントな方法は何ですか?

私が思いついた最善の解決策は、条件を静的ブールに詰め込み、それを条件として使用することです。if-else の上下にかなりの量のコードがあるため、変数のスコープをできるだけ制限するために、全体を中かっこで囲みます。

しかし、これはかなりひどい気がします。これは、実行時ではなくコンパイル時に解決できるように思われますが、プリプロセッサは sizeof を認識していません。これを解決するためのよりクリーンでエレガントな方法はありますか?