Moe*_*oeb 3 c syntax variable-assignment
i = 1, 2, 3, 4, 5;
Run Code Online (Sandbox Code Playgroud)
这实际上是指定1的i.
*****我想知道这种类型的赋值在某个地方是否真的有用吗?*****
你知道这种语法的一些应用吗?
Jar*_*Par 15
当你想在for循环中说出2个迭代变量时,这个语法非常有用
for ( i = 0, j = 0; i < 10 && j < 10; i++ ) {
..
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*utz 14
它是逗号运算符,C的最低优先级运算符.根据C的优先规则,该行解析如下:
(i = 1), (2), (3), (4), (5);
Run Code Online (Sandbox Code Playgroud)
如果您想在该行上执行其他操作,这可能是"有用的":
i = 2, j = 3, k++;
Run Code Online (Sandbox Code Playgroud)
可以避免使用括号括起来if()(也可能导致后来的麻烦)或者允许你在for()循环的控制流中有多个表达式(这实际上是逗号运算符的合法使用).
逗号运算符的另一个常见用途是while循环条件:
while (c = getchar(), c != EOF && c != '\n')
{
Run Code Online (Sandbox Code Playgroud)
这不是"任务类型".逗号运算符绑定非常松散,比赋值松散.所以你写了相当于:
((((i = 1), 2), 3), 4), 5;
Run Code Online (Sandbox Code Playgroud)
void上下文中的整数文字是无用的(除了可能用于避免宏在某些情况下什么都不做的警告,比如assert),所以不,对于这种语法没有用处 - 需要一个表达式,它将i设置为1并计算为5是相当有限的,即使你找到了一个案例,2,3,4是多余的.
更有用的可能是i = 1, code_that_actually_does_something;.最常使用逗号运算符的方法是在不允许多个语句的上下文中隐藏多个副作用,例如在"if"和"while"条件中,或者必须作为表达式求值的宏.