3

私はCを学んでおり、演習として、セミコロンを使用せずに簡単なプログラムを作成しようとしています。ステートメントの置き換えにreturn 0問題がありましたが、これがCでそれを行う(唯一の?)方法であることがわかりましたif(exit(0),0){}

このステートメントはどの程度正確に機能しますか?

exit()fromがvoid関数であることは知っていますが、どの部分stdlibが機能しているかわかりません(残りは私には明らかです)。,0if

4

5 に答える 5

6

Cの,演算子は両方の引数を評価し、2番目の引数の値を返します。だから式

exit(0), 0

呼び出しexit(0)て0を返します。したがって、投稿したコードは実質的に次のようになります。

exit(0);
if (0) {}

ただし、exit()プロセスを終了する必要があるため、これが実際に戻ることはありません。このイディオムは、偽のコンパイラ警告を防ぐために使用されているだけです。

于 2013-03-08T20:38:36.993 に答える
5

Cを学びながら、セミコロンなしでプログラムを書く方法を理解することには価値がありません。あなたはCを学ぶことから、役に立たないトリックで遊ぶことに逸脱したように聞こえます。

ただし、質問に答えるために、コンマで区切られた複数のステートメントがある場合、「結果」が最後のステートメントになります。if評価する値を持つステートメントが必要exit()です。はvoidであるため、値はありません。そのコンマに続く0は、の値を提供しますif

于 2013-03-08T20:38:02.133 に答える
2

あなたが書くとき

int i = (5, 7);

i 割り当てられ 7 ていない 5

括弧内,の区切り式は、LHSからRHSに実行されます。

同様if(exit(0), 0) == if(0)に、exit(0)が最初に実行されます。(空白に最適化しない

次の例とその出力は、その動作をある程度理解するのに役立ちます。

#include<stdio.h>
int fun(char* c){
 printf("%s\n", c);
 return 0;
}
int main(){
 int i = (fun("1"),fun("2"));
 if(fun("3"),7){
   printf("ONE %d", i);
 }
 else{
  printf("TWO %d", i);
 }
}

その出力:

1
2
3
ONE 0

ONEであるため、出力0の最後が特に出力されていることに注意if(fun("3"),7) == if(7)してください。それ以外の場合はをfun()返します0

于 2013-03-08T20:49:09.507 に答える
1

カンマ演算子です。

これは、演算子の右の値が返され、左の部分が評価されることを意味します。

この場合、ステートメントexit()に入れることができるように使用され、ifステートメントでチェックされるパラメーターとして0が渡されますif(void値では機能しません)。

于 2013-03-08T20:43:57.613 に答える
0

;コンマ演算子は、通常のプログラミングと同じ効果を与えるものとして扱うことができます。実際、この場合、内部のすべての式ifが評価されます。ただし、exit()が呼び出されると、プログラムは終了します。カンマ演算子の詳細については、このリンクをたどってください

于 2013-03-08T20:39:45.683 に答える