2016-11-21 2 views
-1

私は学生の宿題をチェックしています。 割り当ては、英語の文字の量をコンソールに出力することです。彼は作品をやったいくつかの理由で、(第7行)の場合 は:このCコードはなぜ機能しますか? (それはしないでください)

int main(void) 
{ 
    char first = 'A'; 
    char last = 'Z'; 
    int amount = 0; 

    amount = ("%d - %d", last - first + 1); 
    printf("The amount of letters in the English alphabet is %d\n", amount); 
    return(0); 
} 

それを見た後、私の代わりに「 - %dの%dの」の括弧内の他のものを入れてみました。私が何をそこに置いても何カンマがそこにあったとしても、それは最後のカンマ(正しい文である)の後にあるものだけを取るでしょう。

実際には何が起こっていますか?

+0

あなたは教師ですか...必要なのはコンマ演算子です。 –

+0

[the comma operator](http://en.cppreference.com/w/c/language/operator_other#Comma_o​​perator)を参照してください。 –

+7

その学生にA +を渡します。彼はあなたに "コンマオペレーター"を教えました。 – haccks

答えて

3

comma operatorの使用例の1つです。コンマ演算子("%d - %d")のLHSオペランドが評価される

("%d - %d", last - first + 1); 

の場合には、結果が評価され、その後、RHS(last - first + 1)を破棄され、結果として返されます。その結果は、amountに割り当てられ、amountには操作last - first + 1の結果が保持されます。 C11を引用

、章§6.5.17、コンマ演算子は

コンマ演算子の左のオペランドはvoid式として評価されています。その評価と右オペランドとの間には、 シーケンスポイントがあります。次に、右側の オペランドが評価されます。結果は型と値を持ちます。

FWIWは、この場合には、"%d - %d"は、それがどの特別意味を運ばない、ちょうど別の文字列リテラルです。

+0

ありがとうございました。私は私よりも経験豊富な多くのプログラマーに尋ねてきましたが、誰も答えを知りませんでした... – bloop

関連する問題