在C ++中你可以这样做:
for (int i = 0 ; i < 10 ; i++) {
/* ... */
}
然后变量i
仅存在于for语句的主体内部。
用while语句存在某种方式吗?
例如,做这样的事情会很好:
while ( (int c = fgetc(file)) != EOF ) {
/* ... */
}
显然这不起作用。但是存在一些语法技巧来有效地做到这一点(变量用于while条件并且只在while语句体内可见)?
答案 0 :(得分:6)
您可以使用:
{
int c = fgetc(file); /* c should only be in scope for a limited time */
while (c != EOF) {
/* Do your stuff */
c = fgetc(file);
}
} /* c goes out of scope */
但它很混乱,而且无可否认是 旧 嵌入式C程序员我个人更喜欢在类或函数开头声明的变量。
真正的答案是,如果您担心将变量的范围限制为给定的代码块,那么它是一个很好的指示器,所述代码块应该是一个单独的函数/类成员,那么您没有担心局部变量的范围。
答案 1 :(得分:5)
for(int c;c = fgetc(file)) != EOF;){
}
答案 2 :(得分:1)
这应该有用;请参阅此示例from a previous question of mine:
while ((c = getopt(argc, argv, "i:o:")) != -1) {
// do stuff
}
编译并运行(事先声明提供c
)
答案 3 :(得分:0)
您可以使用任何可转换为bool
while (int* p = get_ptr()) { /* some code */}
// same with if
if (int* p = get_ptr()) { /* some code */}
但您无法使用自定义条件(与EOF
进行比较)。