这可能是一个非常noob的问题,但我的结果是:
int someVariable = 1;
while (callFunction(someVariable));
if (someVariable = 1) {
printf("a1");
} else {
printf("a2");
}
callFunction (int i) {
while (i< 100000000) {
i++;
}
return 0;
}
所以当你点击while循环时
while (callFunction(someVariable));
线程在该循环中等待,直到完成,然后到
if(someVariable == 1) {
printf("a1");
} else {
printf("a2");
}
还是跳过并移动到if条件,打印“a2”然后在循环结束后再次进入if条件?
UPDATE:这不是有效的c代码只是伪造的,也许我没有说得对,基本上我想弄清楚的是循环之间有什么不同像while (callFunction(someVariable));
是vs
while (callFunction(someVariable)){}
我也改变了我的代码中的粗体部分,即... int someVariable = 1; **,我正在做一个无休止的循环,这不是我的意图。
答案 0 :(得分:6)
函数内部的代码由单个线程按顺序执行。即使你向你的函数发送了另一个线程,它也会连续执行它。
现在99%的编程语言都是如此。
答案 1 :(得分:2)
<强>更新强>
基本上我想弄清楚的是
while (callFunction(someVariable));
之类的循环与while (callFunction(someVariable)){}
之间的差异
没有实际区别。 ;
分隔空语句,{
}
是一个没有语句的范围。任何编译器都可以生成相同的代码。
当然,如果你想在循环的每次迭代中做一些事情,{
}
会创建一个“范围”,你可以在其中创建类型,typedef和变量以及调用函数:在达到'}'或有未捕获的异常时,本地内容被清理 - 调用析构函数,并且编译器继续使用时忘记任何标识符/符号....
原始回答
此...
callFunction(int i){
while (i< 100000000){
i++;
}
return 1;
}
...只是浪费了大量的CPU时间,如果编译器的优化器没有删除循环,因为它没有外部可见的工作 - 即循环对状态没有副作用任何其他“i”和那个是无关紧要的,因为函数返回而不再使用i。如果总是返回“1”,这意味着调用代码......
while (callFunction(someVariable));
......等同于......
while (1)
;
......它只是永远循环。
因此,程序的其余部分 - 在此while
循环之后 - 永远不会执行。
很难猜出你真正想要做什么。
为了更好地自己编程 - 理解代码的行为 - 你应该做一个或两个:
答案 2 :(得分:1)
您的代码在任何输出之前包含无限循环:
while (callFunction(someVariable));
你的意思是;
在那里(空循环),还是你呢?
是什么意思吗?并不重要:callFunction
始终返回1
,转换为true
。 (如果你
真的希望循环为空,至少放;
可以看到的单独一行。)
如果超出while
(因为您修改了一些代码)
某处),if
包含嵌入的赋值;它的
基本相同:
if ( (someVariable = 1) != 0 )
当然,这总是正确的。 (大多数C ++编译器应该
警告有关嵌入式作业或if
的事实
总是评估为真。或两者兼而有之。)
答案 3 :(得分:0)
如果你的循环完成(它会顺序是,如果你修复它),它会打印'a1',因为你在if中做了一个赋值,它总是会返回1,它的计算结果是'true'条件。