名为文件"main000.cpp"的代码在linux机器上使用后续命令行编译和执行:
g++ -std=c++11 -m32 -O0 main000.cpp ; ./a.out
Run Code Online (Sandbox Code Playgroud)
并正常执行
而如果编译并执行将O0改为O1
g++ -std=c++11 -m32 -O1 main000.cpp ; ./a.out
Run Code Online (Sandbox Code Playgroud)
不起作用并生成堆栈转储
谁知道为什么?
#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;
}
Run Code Online (Sandbox Code Playgroud)
对于这两个-O1和-O2,这对我运行良好
所以这可能是你的设置有问题.我建议在里面运行它gdb并得到一个backtrace.
并确保您没有链接库与定义的冲突标识符.