7

重複の可能性:
「、」演算子はCで何をしますか?

さて、今日インタビューをしました、そして彼らは私に次のコードの出力はどうあるべきか尋ねました

#include<stdio.h>

int main ()
{

int a=1,b=1;
char c='0';
if(a,b,c)
   printf("wow \n");
}

自分のマシンで実行した後、答えを得ることができましたが、そこで答えることができませんでした。そのようなifステートメントが許可されているかどうか知りたいですか?どこに記載されていますか?

私の問題は、上記のif条件が、ifステートメントがどのように機能するかを理解できないことです。

**更新**
K&Rでそのようなものは見つかりませんでした。誰もが良い本を推薦できます。私は物事をプログラムしましたが、Cは初めてではありませんが、この質問に失敗した後も、Cの概念をさらに詳しく調べたいと思います。 (特に上記のような)どこで読むことができますか。

4

7 に答える 7

4

コンマ演算子を見てください。

ご覧のとおりe1, e2, e3、ANSI C規格で指定されているように、の評価はe3です。

したがって、if条件が0文字であると評価され'0'、0とは異なるVALUEを持つ場合、条件はtrueであり、「wow」が出力されます。

于 2011-06-18T15:47:09.650 に答える
4

カンマ式は、48の数値を持つ文字値を持つa,b,c最後の値の値を取ります。したがって、式はtrueと評価されます。c'0'

于 2011-06-18T15:48:29.643 に答える
2

ウィキペディアのコンマ演算子のエントリ非常に優れており、それがどのように機能するかを簡潔に説明しています。

式の結果は、a, b, cこのc場合はに等しく'0'、はに評価されtrueます。

于 2011-06-18T15:47:36.220 に答える
1

カンマ式。その結果は、あなたの場合、最も正しい議論です- c。他の多くの演算子とは異なり、コンマ式がシーケンスポイントを保証すること、つまり引数が左から右に評価されることも注目に値します。

于 2011-06-18T15:47:34.633 に答える
0

コンマ演算子は、すべての式を評価し、最後を除くすべての式の結果を破棄する効果を持つC++演算子です。

あなたの場合、次の両方のステートメントは同等です。

if (a,b,c) {
 printf("wow \n");
}

if (c) {
 printf("wow \n");
}

どちらの場合も、IFステートメント内のコードは。の値に基づいて実行されますc

于 2011-06-18T15:51:54.453 に答える
0

カンマ式の結果は、最後の式の値です。これはゼロではない「0」です。

于 2011-06-18T16:17:20.077 に答える
0

今では古くなり、著者はSolaris環境とコンパイラについて多くの言及をしていますが、Peter Van Der Lindenによる「ExpertCProgramming:DeepCSecrets」を見ることができます。本の少なくとも90%はまだ非常に有用です。面接の質問に関する付録もあります。コンマ演算子がカバーされているかどうかは思い出せませんが、他にも多くのことがカバーされています。

他の2つの(無料の)リソース: http ://c-faq.com/

http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

于 2011-06-18T19:15:36.777 に答える