为什么在for()括号里定义一个类型会不行?求解 是不是编译器应该设置一下 按道理应该可以在括号里定义的啊
3 回答
onemoo
TA贡献883条经验 获得超454个赞
你采纳的那个答案没回答问题的核心。
C语言的C99标准中,for语句小括号中的第一个部分可以是表达式,也可以是声明(所以你可以在这里定义一个类型),之前的老标准中这里只允许放表达式。 也许是你编译器默认执行老标准。
另外,C99标准中for语句小括号中的这三个部分都算在单独的作用域中,所以你可以在第一个部分那里定义和前面代码中同名的变量。 但请注意:这个作用域不同于for语句大括号括起的循环体! 循环体作用域算是嵌套在这个作用域之中的,这一点在重复定义同名对象时会看出区别。
为什么改为.cpp就可以了? 那大概是编译器会把代码当作是C++来编译。 C和C++是两门不同的语言,不要因为它们长得像就觉得是一回事,事实上C和C++在语法上是有很多区别的:
C++标准中,for语句小括号中的第一个部分既可以是表达式也可以是声明(就像C99标准),所以把代码当作C++就不会报这个错误了。
但另一方面,C++中for语句循环控制的这三个部分和循环体都算在整个for作用域之中! 这点和C标准并不一样,你的C代码有可能会遇到由此引起的其他问题...
- 3 回答
- 1 关注
- 1356 浏览
添加回答
举报
0/150
提交
取消