我正在构建一个相当复杂的应用程序,它构建时没有任何错误/警告-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);
请注意编译器(gcc v4.3.2)成功地构建了这个-O0
(O1和O2也)。但是-O3
,编译器正确地指出第 7 行是一个潜在问题,导致出现错误:
error: array subscript is above array bounds
很公平,但是当我注释掉第 7 行时,第 8 行没有问题,应该也被标记了!
任何帮助表示赞赏!