1、switch表达式必须产生一个整数结果,case标号必须是整型常量表达式。如果两个case标号具有相同的值,同样也会导致编译时的错误。
case 3.14: // 不是整型
case iVal: // 不是常量
2、对于switch结构,只能在它的最后一个case标号或default标号后面定义变量。制定这个规则是为了避免出现代码跳过变量的定义和初始化的情况。
3、在循环条件中定义的变量在每次循环里都要经历创建和撤销的过程。
4、可以在for语句的init-statement中定义多个对象;但是不管怎么样,该处只能出现一个语句,因此所有的对象必须具有相同的一般类型。
5、goto语句不能跨越变量的定义语句向前跳转;如果确实需要在goto和其跳转对应的标号之间定义变量,则定义必须放在一个块语句中。
6、与其他块语句一样,try块引入局部作用域,在try块中声明的变量,包括catch子句中声明的变量,不能在try外面引用。
7、可使用NDEBUG预处理变量实现有条件的调试代码:
#ifndef NDEBUG
// Error
#endif
8、预处理器还定义了其余四种在调试时非常有用的常量:
__FILE__ // 文件名
__LINE__ // 当前行号
__DATE__ // 文件被编译的日期
__TIME__ // 文件被编译的时间
9、与异常不同(异常用于处理程序执行时预期要发生的错误),程序员使用assert来测试“不可能发生”的条件。