C while循环中的逗号运算符
伙计们,当我参加一个在线C测试时,我在(s++,6)的时候遇到了一个语句C while循环中的逗号运算符,c,loops,C,Loops,伙计们,当我参加一个在线C测试时,我在(s++,6)的时候遇到了一个语句while其中s初始化为零。我不知道当中间有一个逗号运算符时,while循环到底会做什么。当我在gcc编译器上运行它时,它没有输出。但是当我将while条件更改为while(1,s++)时,它将s值返回为1。谁能告诉我当时发生了什么。逗号运算符计算左侧,然后丢弃结果。while条件对除零以外的任何值都保持循环。第一个将是一个无限循环;第二个将增加s,然后停止 我怀疑在这种情况下,逗号是一个输入错误,他们的意思是输入一个小于的
while代码>其中s初始化为零。我不知道当中间有一个逗号运算符时,while循环到底会做什么。当我在gcc编译器上运行它时,它没有输出。但是当我将while条件更改为while(1,s++)
时,它将s值返回为1。谁能告诉我当时发生了什么。逗号运算符计算左侧,然后丢弃结果。while条件对除零以外的任何值都保持循环。第一个将是一个无限循环;第二个将增加s,然后停止
我怀疑在这种情况下,逗号是一个输入错误,他们的意思是输入一个小于的。逗号运算符计算左侧,然后丢弃结果。while条件对除零以外的任何值都保持循环。第一个将是一个无限循环;第二个将增加s,然后停止
我怀疑在这种情况下,逗号是一个打字错误,他们的意思是键入一个小于。来自C11标准§6.5.17:
逗号运算符的左操作数作为空表达式计算;它的求值与右操作数的求值之间有一个序列点。然后计算右操作数;结果有其类型和值
这意味着1,s++
计算1
(因此不会发生任何事情),然后它计算s++
,并仅返回该表达式的结果
所以这个表达式等价于,而(s++)
。如果逗号表达式的左侧没有任何副作用(如在您的情况下),则可以将其删除。来自C11标准§6.5.17:
逗号运算符的左操作数作为空表达式计算;它的求值与右操作数的求值之间有一个序列点。然后计算右操作数;结果有其类型和值
这意味着1,s++
计算1
(因此不会发生任何事情),然后它计算s++
,并仅返回该表达式的结果
所以这个表达式等价于,而(s++)
。如果逗号表达式的左侧没有任何副作用(如在您的情况下),则可以将其删除。有关此代码如何产生的精彩猜测,请参见“1”;有关此代码如何产生的精彩猜测,请参见“1”