1》switch(c)语句中c不可以是int,long,char ,float ,unsigned int。答:float:比如floata = 10/3,a的值涉及到一个精度问题,不同计算机是不同的,干脆不能比较浮点类型的数据的了。2》写出求最小值的宏#definemin(x,y) ({ \ typeof(x)_x = (x); \ typeof(y)_y = (y); \ (void)(&_x == &_y); \ _x解释 :(void)(&_x == &_y);用于判断输入的两个值的类型是否是一致的。如果不一致,那么编译器就会做出如下警告:warning:comparison of distinct pointer types lacks a cast3》预处理器标识#error的目的是什么?编译程序时,只要遇到#error就会跳出一个编译错误,其目的就是保证程序是按照你所设想的那样进行编译的。 举个例子: 程序中往往有很多的预处理指令 #ifdefXX ... #else #endif 当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了XX时,就可以改成如下这样进行编译: #ifdefXX ... #error "XX has been defined" #else #endif如果XX被定义了的话,编译的时候编译器就会报错,errorc320 "XX has been defined".所以用#error可以用于检查一个宏是否已经被定义了。