乱序执行

时间:2014-05-04 17:10:38

标签: c++ g++4.8

g ++ 4.8.2(cygwin)

testMarkListIO()语句在testListIO()语句之前执行。这有什么理由吗?

bool testIO() {
   bool flag = true;

   time_t rawtime;
   struct tm * ptm;
   time ( &rawtime );
   ptm = gmtime ( &rawtime );
   stringstream pretty;
   pretty << "TestIOLog_" << ptm->tm_yday
                          << ptm->tm_hour
                          << ptm->tm_min
                          << ptm->tm_sec
                          << ".log";
   filename = pretty.str();
   flag = (testListIO())?            flag: false;
   flag = (testMarkListIO())?        flag: false;
   flag = (testDescriptorListIO())?  flag: false;
   flag = (testUserDataIO())?        flag: false;
   flag = (testInclude())?           flag: false;

   sleep(1);
   testResultOutput("Test I/O", flag);
   return flag;
}; // bool testIO()

2 个答案:

答案 0 :(得分:1)

对于这些陈述(以及其他类似的陈述):

flag = (testListIO())?            flag: false;
flag = (testMarkListIO())?        flag: false;

如果函数是内联的,并且编译器可以告诉除了设置flag之外没有任何副作用,只要传递给{{1的值,它就可以自由地命令那些它认为合适的语句并且从函数返回的内容与严格按顺序执行语句时发生的情况相同。

这通常被称为“似乎”规则。本质上,如果可见结果与根据源代码顺序执行它们的可见结果相同,编译器是否可以自由执行它想要的东西。

答案 1 :(得分:0)

Bonehead问题。抱歉。正确答案是我输出错误。我输出错误的信息。叹。永远不要相信程序员可以做一些孩子可以做的事情。

抱歉,抱歉,抱歉。

本领域