C语言中如何在while循环中同时完成变量赋值与值校验
报错原因
C语言语法规定,while关键字后的括号内只能填写表达式,你尝试的写法中int thing = function_returning_int()属于变量声明语句,不属于合法表达式,因此无法通过编译。
你提到的「赋值运算符返回被赋的值」规则仅适用于赋值表达式,不适用于带类型声明的变量初始化操作。
可行实现方案
方案1(推荐,C99及以上标准支持)
使用for循环实现变量声明、赋值、校验逻辑的合并,变量作用域仅限制在循环内部,不会污染外部命名空间,全程仅调用一次耗时函数,完全符合时间敏感型应用的性能要求:
// for循环的第三个表达式留空即可,所有逻辑放在前两个位置 for (int thing; (thing = function_returning_int()) <= foo; ) { bar(thing); }
方案2(兼容C89标准)
如果你的编译环境不支持C99,可以将变量声明提到while循环外部:
int thing; while ((thing = function_returning_int()) <= foo) { bar(thing); }
如果需要限制变量作用域,可以在外层加独立代码块:
{ int thing; while ((thing = function_returning_int()) <= foo) { bar(thing); } }
内容的提问来源于stack exchange,提问作者Adel M.
相关产品推荐
相关产品推荐

