C++ C++;没有花括号的while循环?
我正在研究一些代码,我注意到一些我以前从未见过的东西 有一个while循环,但没有花括号。 我应该解释代码的作用,但这部分和while混淆了我 如果有人能解释为什么while循环没有花括号,我将不胜感激C++ C++;没有花括号的while循环?,c++,C++,我正在研究一些代码,我注意到一些我以前从未见过的东西 有一个while循环,但没有花括号。 我应该解释代码的作用,但这部分和while混淆了我 如果有人能解释为什么while循环没有花括号,我将不胜感激 #include <cstring> #include <cerrno> #include <algorithm> #include <functional> #include <iostream> #include <memor
#include <cstring>
#include <cerrno>
#include <algorithm>
#include <functional>
#include <iostream>
#include <memory>
#include <sys/random.h>
#include <sys/types.h>
#include <unistd.h>
using namespace std;
size_t n_children = 120; //size_t is an unsigned integer 0 .. 4,294,967,295
typedef int64_t Konto; // -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807, typedef abkürzung fü int64_t an Konto zugewiesen
Konto konto = 0; // 64 bits long long
int main() {
while (fork() && --n_children);
unsigned int transaktionen = 100; //
while (transaktionen--) { // 100 times
int8_t value; // 8 bit signed char (-128 .. 127)
if (getrandom(&value, sizeof(value), 0) == sizeof(value))
konto += value;
}
cout << "My Konto value: " << konto << endl;
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
儿童人数=120//大小\u t是无符号整数0。。4,294,967,295
typedef int64_t Konto;//-9,223,372,036,854,775,808 .. 9223372036854775807,类型定义为abkürzung füint64_t an Konto zugewiesen
近邻近邻=0;//64位长
int main(){
while(fork()&&--n_子项);
无符号整数transaktionen=100;//
而(transaktionen--){//100次
int8_t value;//8位有符号字符(-128..127)
if(getrandom(&value,sizeof(value),0)=sizeof(value))
konto+=值;
}
coutwhile循环的语法是while()
该语句可以是单个语句,也可以是大括号中的复合语句。
这里的语句就是;
,空语句
所以这相当于
while (fork() && --n_children){}
while(1) {}
其中,该语句是复合语句,没有任何其他嵌套语句。
如果所有工作都是在控制条件下完成的,那么这也是首选的形式。while循环的语法是while()
该语句可以是单个语句,也可以是大括号中的复合语句。
这里的语句就是;
,空语句
所以这相当于
while (fork() && --n_children){}
while(1) {}
其中,该语句是复合语句,没有任何其他嵌套语句。
如果所有工作都是在控制条件下完成的,这也是首选的形式。C/C++中的while循环定义为:-
while condition
statement or block
块是一对大括号内的一系列语句。语句只是一行以分号结尾的代码。语句可以为null或空,因此“;”是有效语句。
因此,在这种情况下,当while循环的内容为空时,while循环中的条件会被重复测试,因此它会在不断重新测试条件时“旋转”(在本例中为fork'ing)。这不是一种理想的模式,有时称为“忙等待”循环,它会消耗大量CPU时间。
在本例中,更清晰的书写方式是:-
for (int count = 0 ; count < n_children ; ++count)
{
fork ();
}
for(int count=0;count
较旧的编译器可能会生成效率更高的代码,但现在的差异将非常小。C/C++中的while循环定义为:-
while condition
statement or block
块是一对大括号内的一系列语句。语句只是一行以分号结尾的代码。语句可以为null或空,因此“;”是有效语句。
因此,在这种情况下,当while循环的内容为空时,while循环中的条件会被重复测试,因此它会在不断重新测试条件时“旋转”(在本例中为fork'ing)。这不是一种理想的模式,有时称为“忙等待”循环,它会消耗大量CPU时间。
在本例中,更清晰的书写方式是:-
for (int count = 0 ; count < n_children ; ++count)
{
fork ();
}
for(int count=0;count
较旧的编译器可能会产生更高效的代码,但现在的差异将非常小。与流行的观点相反,if
、while
和for
在主体为空时可以用分号终止,而已经足够的内容可以不用主体来表达。
例如,这是一个无限循环:
while(1);
这相当于
while (fork() && --n_children){}
while(1) {}
在您的示例中:
while (fork() && --n_children);
这会一直调用fork()
函数并递减n_children
,直到这两个表达式中至少有一个计算为0
或false
。当然,这相当于:
while (fork() && --n_children) {}
如果n\u children
变为0或fork()
返回错误值,则循环停止。换句话说,两个表达式的计算结果都必须为true/1
,循环才能继续,因此和&
使用空for
循环计算C字符串长度的一个简短示例:
int main()
{
char str[] = "A String";
for(len = 0; str[len] != '\0'; len++);
printf("Length: %d", len);
}
与流行的观点相反,if
、while
和for
如果有一个空的主体,可以用分号终止,而足够的内容可以不用主体来表达。
例如,这是一个无限循环:
while(1);
这相当于
while (fork() && --n_children){}
while(1) {}
在您的示例中:
while (fork() && --n_children);
这会一直调用fork()
函数并递减n_children
,直到这两个表达式中至少有一个计算为0
或false
。当然,这相当于:
while (fork() && --n_children) {}
如果n\u children
变为0或fork()
返回错误值,则循环停止。换句话说,两个表达式的计算结果都必须为true/1
,循环才能继续,因此和&
使用空for
循环计算C字符串长度的一个简短示例:
int main()
{
char str[] = "A String";
for(len = 0; str[len] != '\0'; len++);
printf("Length: %d", len);
}
它一直调用fork()
函数,直到它的返回值和n_子项
减1都为正。循环的主体是;
-空语句。它相当于{}
@gscaparrotti No,它在“条件为非零,而不是“直到”时继续调用函数@Markus,你说得对,我的badIt一直在调用fork()
函数,直到它的返回值和n_子函数都是正数。循环的主体是;
-空语句。它相当于{}
@gscaparrotti不,它一直在“条件为非零,而非零”时调用函数“直到”@Markus,你说得对,我的孩子,我其实不知道