式:
(expression1, expression2)
最初に式 1 が評価され、次に式 2 が評価され、式全体に対して式 2 の値が返されます。
while
で最も多く使用されているのを見てきました ループ:
string s;
while(read_string(s), s.len() > 5)
{
//do something
}
操作を実行してから、副作用に基づいてテストを実行します。もう 1 つの方法は、次のようにすることです:
string s;
read_string(s);
while(s.len() > 5)
{
//do something
read_string(s);
}
コンマ演算子は左側のオペランドを評価し、結果を破棄してから右側のオペランドを評価し、それが結果になります。 慣用 リンクに記載されている使用は、 for
で使用される変数を初期化するときです ループし、次の例を示します:
void rev(char *s, size_t len)
{
char *first;
for ( first = s, s += len - 1; s >= first; --s)
/*^^^^^^^^^^^^^^^^^^^^^^^*/
putchar(*s);
}
そうでなければ、多くの すばらしい ものはありません コンマ演算子の使用 ただし、読みにくく、維持しにくいコードを悪用するのは簡単です。
ドラフト C99 標準の文法は次のとおりです。
expression:
assignment-expression
expression , assignment-expression
そしてパラグラフ2 言います:
脚注 97 言います:
つまり、カンマ演算子の結果に割り当てることはできません .
コンマ演算子の優先順位が最も低いため、()
を使用する場合があることに注意することが重要です。 たとえば、
#include <stdio.h>
int main()
{
int x, y ;
x = 1, 2 ;
y = (3,4) ;
printf( "%d %d\n", x, y ) ;
}
次の出力が得られます:
1 4