0

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()
4

2 回答 2

1

对于这些语句(以及其他类似的语句):

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

如果函数是内联的并且编译器可以告诉它除了设置之外没有副作用flag,那么可以自由地对这些语句进行排序,但是它认为合适,只要传递给testResultOutput()函数和从函数返回的值与什么相同如果语句严格按顺序执行,就会发生这种情况。

这通常被称为“好像”规则。本质上,如果可见结果与根据源代码顺序执行它们的结果相同,则编译器可以随意执行任何事情。

于 2014-05-04T17:45:43.750 回答
0

白痴问题。对不起。正确的答案是我犯了一个输出错误。我输出错误信息。叹。永远不要相信程序员会做孩子能做的事情。

对不起,对不起,对不起。

艺术

于 2014-05-04T18:03:46.080 回答