我正在构建一个相当复杂的应用程序,它没有任何错误/警告-O0.然而,当我尝试时-O3,我得到了一些令人费解的东西.例如:
1: static pinfo_t* pinfo[2] = { &gv1, &gv2 }; // GLOBAL
2:
3: int i;
4: int x = sizeof(pinfo);
5:
6: for (i = 0; i < x; i ++)
7: if (pinfo[i]->id == NO_ID)
8: printf("%s\n", pinfo[i]->name);
Run Code Online (Sandbox Code Playgroud)
请注意编译器(gcc v4.3.2)已成功构建-O0(使用O1和O2).但是-O3,编译器正确地将第7行精确定位为导致错误行的潜在问题:
error: array subscript is above array bounds
Run Code Online (Sandbox Code Playgroud)
很公平,但是当我在第7行发表评论时,第8行也没有问题,这也应该被标记!
任何帮助表示赞赏!