4

私はいくつかのMFCコードを調べていましたが、この式に出くわしました。これはOnInitDialog()関数にあり、MFC固有のようには見えませんでした。変数には名前があり、値は0でした。

int volatile something, somethingElse; //this was global

something, somethingElse = 0; //this was inside the function

これはC++で意味がありますか?カンマ演算子がどのように機能するかは知っていますが、ここのような自由形式では、式を区切る必要があります。変数名も式ですか?このコードはコンパイルされますが、これはどのように機能しますか?

4

4 に答える 4

6

これは、プログラムのエラーである可能性があります。ステートメント

a, b = c;

と完全に同等です

b = c;

コンマ演算子は左から右に評価し、最後を除くすべての値を破棄するためです。式aには副作用がないため、基本的には何もしません。

これは、プログラマーのエラーか、別の言語からC++へのコードの誤った翻訳のいずれかであると思われます。あなたは彼らにこれについて知らせるために作者に連絡するべきです。

お役に立てれば!

于 2012-02-01T19:34:48.010 に答える
4

合法だが疑わしい。カンマの前の部分は何もしません。

于 2012-02-01T19:34:28.667 に答える
4

これはC++で意味がありますか?

はい、構文的にはそうですが、コメントがなければ、開発者の意図が(もしあれば)変数の警告を抑制する以外にあるのかわからないかもしれません。

変数名も式ですか?

はい、変数自体は式です。元。if(<expression>) if(something)

このコードはコンパイルされますが、これはどのように機能しますか?

これは、コンマ演算子somethingを使用し、 0をに割り当てた結果を無視することで機能しsomethingElseます。somethingマークされていたもののvolatile、元の開発者は未使用の変数について不平を言うコンパイラを持っていた可能性があり、賢い開発者であるため、その構文で抑制することにしました。

于 2012-02-01T19:34:35.367 に答える
4
something, somethingElse = 0; 

おそらく、変数somethinをに初期化するために、変数ganに対する未使用の変数の警告を回避するために行われます。somethingElse0

于 2012-02-01T19:34:38.893 に答える