1. 背景 goto语句虽然目前已经不提倡使用,但是用起来还是很方便,尤其是老代码中见的比较多. 在改动有goto语句的老代码时需要特别注意,是否跳过来资源的释放.有用变量的初始化等等. 很久之前写c程序时,有些提交系统要求变量必须在函数开始地方全部申明,最近遇到了"crosses initialization of XXX"知道为什么了.就是因为有可能跳过变量的声明. 2. 代码例子 例子1: #include <iostream> class Test{ public:…
在switch-case中定义了变量,用g++编译的时候报错crosses initialization of “XXX” ,在网上一查,说是gcc要求变量的定义不能位于goto之后 将变量定义放在switc-case外就解决了. 参考链接: http://blog.sina.com.cn/s/blog_4b9eab320100s8s1.html…
switch(c) { case 0x01: int temp = a + b; .... break; case 0x02: break; default:break; } 此时会报如题所示错误 原因是因为C和C++中,一个变量的生命期(作用域)是这么规定的,中文还不好解释,英文原文是这样的:The scope of a variable extends from the point where it is defined to the first closing brace that mat…
switch(c) { case 0x01: int temp = a + b; .... break; case 0x02: break; default:break; } 此时会报如题所示错误 原因是因为C和C++中,一个变量的生命期(作用域)是这么规定的,中文还不好解释,英文原文是这样的:The scope of a variable extends from the point where it is defined to the first closing brace that mat…
出错代码段: switch (t) { case 0:  int a = 0;  break; default:  break; }编译时提示:“error C2361: initialization of 'a' is skipped by 'default' label”.这怎么可能? C++约定,在块语句中,对象的作用域从对象的声明语句开始直到块语句的结束,也就是说default标号后的语句是可以使用对象a的.如果程序执行时从switch处跳到default处,就会导致对象a没有被正确地初…
目录 编译链接 使用初始化和使用赋值时,调用的函数不同:使用 auto_ptr() 时可能会出现编译错误 宏定义不受命名空间的约束 Switch-case 中不能定义变量 技巧/注意项 多层继承中基类的纯虚函数 通过配置文件控制日志的输出 工厂模式中的 context 类 尽量使用多态来代替类型判断 语法 多态在基类中仍生效 string find 获取文件大小 查找串是否出现在列表,需要用 set 实现而不是 string.find Valgrind Syscall param write(b…
http://www.cnblogs.com/foohack/p/4090124.html 下面的类似的源码在MSVC上能正确编译通过.但是gcc/g++上就会错: 1. if(expr)2. goto error; 3. size_t var = 0; 4.error:5 error_handle(); 4:1: error: jump to label ‘error’ [-fpermissive]2:35: error: from here [-fpermissive] 3:9: error…
浅析C/C++中的switch/case陷阱 先看下面一段代码: 文件main.cpp #include<iostream> using namespace std; int main(int argc, char *argv[]) { ; switch(a) { : ;cout<<b<<endl;break; : cout<<b<<endl;break; default:break; } ; } 在gcc编译器下编译的结果为: 提示跳过了变量b…
今天再写alsa的时候遇到一个稀奇古怪的问题,网上看了下资料,摘出来入下 代码: int main() { ; switch(a) { : ; break; : break; default: break; } ; } 编译器提示错误: testswitch.cpp: In function ‘int main()’:testswitch.cpp:9: error: jump to case labeltestswitch.cpp:8: error: crosses initialization…
switch 内部的变量定义: ; switch(i) { : string str; //error ; //error int val2; //right ; //right : val2 = ; cout << val2 << endl; } <C++ Primer> P163: 如果在某处一个带有初始值的变量位于作用域之外,在另一处该变量位于作用域之内,则从前一处跳转到后一处的行为是非法行为. 在上面的代码中line 5.6是错误的,line 7.8是没问题的.…