我正在学习第2章:“ The C programming language Edition 2”的类型,运算符和表达式,并且遇到了这样的代码片段:
/* atoi: convert s to integer */
int atoi(char s[]) {
int i, n;
n = 0;
for (i=0; s[i]>='0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
}
让我感到困惑的是n = 10 * n + (s[i] - '0');
并未被{}
包围,我想应该是
/* atoi: convert s to integer */
int atoi(char s[]) {
int i, n;
n = 0;
for (i=0; s[i]>='0' && s[i] <= '9'; ++i) {
n = 10 * n + (s[i] - '0');
}
}
我的假设有什么问题?
答案 0 :(得分:4)
可以在6.8.5迭代语句中读取for
循环的语法:
for ( expression_opt ; expression_opt ; expression_opt ) statement for ( declaration expression_opt ; expression_opt ) statement
依次,statement
是(6.8个语句和块):
statement: labeled-statement compound-statement expression-statement selection-statement iteration-statement jump-statement
compound-statement
是您写作时使用的那个
for (i=0; s[i]>='0' && s[i] <= '9'; ++i) {
n = 10 * n + (s[i] - '0');
}
但是,当您写时:
for (i=0; s[i]>='0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
您正在使用expression-statement
。
答案 1 :(得分:2)
如果循环中只有一个语句,则括号是可选的。如果您有多个陈述,则必须大括号。