下面的代码命名为文件“main000.cpp”,使用以下命令在Linux机器上进行编译和执行:
g++ -std=c++11 -m32 -O0 main000.cpp ; ./a.out
并且会正常执行。
而如果将代码编译并将O0更改为O1后执行
g++ -std=c++11 -m32 -O1 main000.cpp ; ./a.out
为什么代码无法运行并生成堆栈转储?
有没有人知道原因?
#include <stdio.h>
#include <string>
using namespace std;
typedef unsigned int Token;
const Token tokenBase=0x80000000;
enum classId{
classNoId=tokenBase,
classPrimitiveId,
};
struct classInfo{classId id;wstring name;};
classInfo classInfos[]={
{classNoId,L"classNoID"},
{classPrimitiveId,L"classPrimitiveId"},
};
int main(){
int id=classInfos[0].id;
return 0*id;
}