切换不在C中工作

切换不在C中工作,第1张

概述我今天遇到了一个非常奇怪的问题.让concider得到以下代码: int llex(){ cout<<"enter 1"<<endl; char32_t c = U'('; cout<<(c==U'#')<<endl; switch(c){ case U'#': cout<<"enter 2"<<endl; return 5; 我今天遇到了一个非常奇怪的问题.让concider得到以下代码:

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中工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1219880.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存