今天师弟问我C语言下怎么没有max函数,我记得是有max宏的,直接写这个宏的话,编译会出现没有定义的错误,问题应该是没有包含该宏定义的头文件,头文件为stdlib.h,奇怪的是包含该头文件后,编译还是出错,我所有的开发工具是VC6.0.我定位到该宏所在的头文件代码,代码如下:
1: #ifndef __cplusplus
2: #define max(a,b) (((a) > (b)) ? (a) : (b))
3: #define min(a,b) (((a) < (b)) ? (a) : (b))
4: #endif
虽然对这预编译语句有些模糊,但是大概知道了,应该是考虑兼容性的问题,如果是c++编译器的话,那么该宏就没有定义,也就是说,只有在C编译器下,该宏才被包含进来,这也正是__cplusplus的意义,该词表明,当前环境使用的是C++编译器。
#ifndef __cplusplus
#endif
表示,如果不是C++编译器的话(即没有定义__cplusplus 这个宏的时候),才定义中间的max宏。后来我们建立了一个.c文件,对该文件编译,能通过,这也证明了我们的猜想是正确的。
由此可见,预编译指令,可以根据编译器的不同执行不同的操作。
没有评论:
发表评论