可能你编译下面的代码会报错:
g++ 编译:
main.cpp: In function `int main()':
main.cpp:11: jump to case label
main.cpp:9: crosses initialization of `int y'
用 gcc 编译:
error: syntax error before "int"
改成这样:
gcc 还是没法通过编译。
把 case 部分用 {} 括起来,则都可以通过编译。
这大概是因为:
有这种限制,如果你定义一个变量,并且在后面还要使用它, 那么它的定义部分不能被条件跳过。
加了花括号就生成了一个新的block,当然可以通过了。
但是为什么第二种情况可以在 g++ 中编译过去呢?
我是在看api画笔的时候,出现这个问题。可我把画图代码写在一个函数里,问题解了。这个问题很蛋疼!
本文探讨了使用GCC编译器时遇到的一个特定错误——在switch-case结构中直接声明并初始化变量导致的编译失败问题。文章详细解释了错误的原因,并提供了修改后的正确代码示例,同时分析了不同编译器对此类语法的不同处理方式。
1万+

被折叠的 条评论
为什么被折叠?



