0

if文で見たのはこんな感じでした。

if((var = someFunc()) == 0){
   ...
}

声明は

(var = someFunc()) 

どのような環境にいても、常に var の最終値を返しますか?

4

3 に答える 3

4

これは、変数に割り当て、同時に戻り値を比較する1行の方法です。

比較演算子は代入演算子よりも優先順位が高いため、代入の前後に括弧が必要です。そうでない場合varは、の値が割り当てられますsomeFunc() == 0

于 2012-10-23T10:04:13.800 に答える
1

これは単に間違っています。varが割り当てられ、その値が定数によって上書きされます0。したがって、関数の戻り値は失われ、if常に失敗します。ifほとんどのコンパイラは、今日ではおそらくそれについて警告を発するでしょうif。おそらく意図されていたことを行う正しい方法は、

if((var = someFunc()) == 0) {

(注意してください、これは、よくある初心者の間違いを装って​​脆弱性を持ち込もうとする悪意のあるコードである可能性もあります。最近、誰かが UID を 0 に割り当てた Linux カーネルにチェックを密輸しようとしたケースがありました (つまり、 root であることを確認するふりをしている間. ただし、機能しませんでした.)

于 2012-10-23T10:06:48.440 に答える
0

これは正しいです、私はいつもそれを使用しています

if ((f=fopen(s,"r"))==NULL) return(fprintf(stderr,"fopen(%s,r) が失敗しました。errno=%d, %s\n",s,errno,strerror (エラー番号))); /* ファイル s を正常に開き、FILE *f から好きなように読み取ります */

メモリを calloc() するときにも使用します。

someFunc (私の場合は fopen または calloc) の戻り値を変数に代入し、その戻り値もテストします。これは、代入とテストを別々にデバッグしたくないという意味のショートカットです。

于 2013-04-11T13:41:40.973 に答える