【发布时间】:2019-01-24 17:07:46
【问题描述】:
我将 C 用于我的操作系统主题,我已经看到 for( ;; ) 的用法,但我不知道其含义。我猜这是一个无限循环。
int sfd, tfd;
char c;
for (;;) {
if ( read (sdf , &c , 1) != 1 ) return;
write( tfd, &c, 1 );
}
【问题讨论】:
我将 C 用于我的操作系统主题,我已经看到 for( ;; ) 的用法,但我不知道其含义。我猜这是一个无限循环。
int sfd, tfd;
char c;
for (;;) {
if ( read (sdf , &c , 1) != 1 ) return;
write( tfd, &c, 1 );
}
【问题讨论】:
for 语句(参见 c99 6.8.5.3)有 3 个(可选)部分:初始化、条件和增量。
“条件”部分的缺失被解释为true(参见c99 6.8.5.3p2)
...省略的表达式 2 被一个非零常量替换。
【讨论】:
for 循环是一个不同的野兽,他们的回答者需要挖掘出相应的 C++ 标准参考。
这确实是一个无限循环,需要break 或return(或跳转)才能退出。
它优于等效的 while(1),因为它通常会发出编译器警告,而 for(;;) 几乎肯定不会。
【讨论】:
for 中的每个表达式都是可选的,编译器不会费心剔除奇怪的情况,所以for(;;) 将自己确立为成语。
while(1) for(;;) 沉默他们的警告(Windriver/Diabdata)所以有区别。