执行顺序

问题描述:

这可能是一个很小白的问题,但我是这样做的结果会是什么:执行顺序

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"); 
} 

或者它跳过并移动到状态,则后如果打印“A2”和T他循环完成了再经过if条件吗?

UPDATE:这不是彪是有效的C代码只是伪,也许我没有一句话是正确的,基本上我试图找出是什么样while (callFunction(someVariable));环路之间的不同是VS

while (callFunction(someVariable)){} 

我还改变了我的代码中的粗体部分ie ** int someVariable = 1; **,我正在做一个无休止的循环,这不是我的意图。

+2

请缩进代码。此外,此代码不是有效的C++,因为'callFunction'没有指定返回类型。 – 2011-05-23 08:51:34

+5

什么是“VM模型”? – 2011-05-23 08:52:25

+2

'callFunction'总是返回'1'。 while循环不会终止。无论是“a1”还是“a2”都不会被打印出来。 – pmg 2011-05-23 08:55:57

UPDATE

基本上我试图找出是什么样while (callFunction(someVariable));环路之间的不同是VS while (callFunction(someVariable)){}

没有实际的区别。 ;划定一个空的语句,{}是一个没有语句的范围。任何编译器都可以产生相同的代码。

当然,如果你想要做的事在循环的每次迭代,{}创建“范围”中,你可以创建类型,typedef和变量以及调用函数:在到达“}”或有未捕获的异常,本地内容是清理 - 带有析构函数调用,任何标识/符号使用遗忘编译器继续....

原来的答案

这...

callFunction(int i){ 
    while (i< 100000000){ 
     i++; 
    } 
    return 1; 
} 

......只是如果编译器的优化器没有删除循环的基础上它没有外部可见的工作 - 也就是说,没有对状态的循环的副作用,只是浪费了大量的CPU时间任何其他的“我”,这是无关的,因为该函数返回,而不再使用我。如果总是返回 “1”,这意味着调用代码...

while (callFunction(someVariable)); 

...等价于...

while (1) 
    ; 

...这只是循环永远。

因此,程序的其余部分 - 此while循环 - 从未执行。

很难猜出你真正想要做什么。

要获取编程自己更好 - 了解你的代码的行为 - 你应该做的一项或两项:

  • 插入报表输出到您的程序,所以你可以看到变量的值发生变化随着程序的执行,及是否退出循环
  • 使用调试器做同样的

函数内部的代码由一个线程按顺序执行。即使你将另一个线程发送给你的函数,它也会执行它的顺序。

现在99%的编程语言都是这样。

+0

有趣的是哪种语言在另外1%?所以我可以避免...;) – Nim 2011-05-23 09:08:30

+1

@Nim:(纯粹的)函数式语言通常没有这些严格的顺序语义..(但他们也不允许你这样写这样的代码)。还有专门为并行和消息传递设计的语言,几乎所有语言都是并行运行,直到达到某个同步点。只有命令式语言真的有“做到这一点,然后做”这种语义 – jalf 2011-05-23 10:14:33

你的代码中包含的任何输出前一个死循环:

while (callFunction(someVariable)); 

你的意思是为;在那里(空循环),还是你 的意思是什么东西?并不重要:callFunction 总是返回1,它被转换为true。 (如果你 真的希望循环是空的,至少把;上 一个单独的行,其中可以看出)。

如果你获得超越while(因为你修改一些代码 某处) if包含嵌入的分配;这是 基本相同:

if ((someVariable = 1) != 0) 

哪个,当然,总是如此。 (大多数C++编译器应该 警告嵌入式转让或事实if 结果始终为true,或者两者兼而有之。)

+0

会有一个区别while(1);和(1){}? – Saad 2011-05-23 16:07:19

+0

@Saad号码都不是很可读。 'while'控制一个或多个应该写在单独行上的语句,缩进以便读者可以看到它所控制的内容。 – 2011-05-23 16:53:42

如果你的循环结束(它会被依次是的,如果你修复它),它会打印'a1',因为你在if中做了一个赋值,它总是返回1,对于条件来说它的计算结果为'true'。