int llex(){ cout<<"enter 1"<<endl; char32_t c = U'('; cout<<(c==U'#')<<endl; switch(c){ case U'#': cout<<"enter 2"<<endl; return 5; default: break; }}int main( int argc,char** argv){ cout<<"enter 1"<<endl; char32_t c = U'('; cout<<(c==U'#')<<endl; switch(c){ case U'#': cout<<"enter 2"<<endl; return 5; default: break; } cout << "------------" << endl; llex();}
输出是:
enter 10------------enter 10enter 2
请注意,main中的代码对于llex函数中的代码是IDENTICAL.他们为什么输出不同的结果(我在clang上使用C 11).
解决方法 你的llex()函数应该总是返回一个值,但它不会.如果控制流未达到return语句,则这是未定义的行为.根据C 11标准第6.6.3 / 2段:Flowing off the end of a function is equivalent to a return with no value; this results in undefined
behavior in a value-returning function.
除非你解决这个问题,否则你不能对你的程序做任何假设,也不能对它有所期望.
例如,我无法重现this fixed live example中的行为.
总结以上是内存溢出为你收集整理的切换不在C中工作全部内容,希望文章能够帮你解决切换不在C中工作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)