C中循环的执行顺序

时间:2011-05-23 08:49:36

标签: c++ c

这可能是一个非常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; **,我正在做一个无休止的循环,这不是我的意图。

4 个答案:

答案 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'条件。