Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219786
  • 博文数量: 39
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 584
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-18 20:24
个人简介

学习总结,分享快乐。 望指正错误, 共同提高!!!

文章分类

全部博文(39)

分类: C/C++

2015-04-21 07:30:13


        

1》switch(c)语句中c不可以是int ,long,char ,float ,unsigned int。

答:float:比如float a = 10/3,a的值涉及到一个精度问题,不同计算机是不同的,干脆不能比较浮点类型的数据的了。


2》写出求最小值的宏

#define min(x,y) ({ \

            typeof(x) _x = (x);             \

            typeof(y) _y = (y);             \

            (void) (&_x == &_y);         \

               _x < _y ? _x : _y; })

解释    :

(void) (&_x == &_y);用于判断输入的两个值的类型是否是一致的。如果不一致,那么编译器就会做出如下警告:warning: comparison of distinct pointer types lacks a cast



3》预处理器标识#error的目的是什么?

编译程序时,只要遇到#error就会跳出一个编译错误,其目的就是保证程序是按照你所设想的那样进行编译的。
举个例子:
程序中往往有很多的预处理指令
#ifdef XX
...
#else
#endif
当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了XX时,就可以改成如下这样进行编译:
#ifdef XX
...
#error "XX has been defined"

#else

#endif

如果XX被定义了的话,编译的时候编译器就会报错,error c320 "XX has been defined".

所以用#error可以用于检查一个宏是否已经被定义了。

阅读(1830) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~