黑马程序员技术交流社区

标题: #ifndef XXXX #define XXXX #endif是什么? [打印本页]

作者: 葬花桥    时间: 2014-4-22 15:36
标题: #ifndef XXXX #define XXXX #endif是什么?
本帖最后由 葬花桥 于 2014-4-22 19:02 编辑

加不加上面的代码程序都没问题,它们有什么作用?求指教

作者: 愿我能    时间: 2014-4-22 16:05
条件编译
  1. #if 条件1 2  ...code1... 3 #elif 条件2 4  ...code2... 5 #else 6  ...code3... 7 #endif
复制代码
1> 如果条件1成立,那么编译器就会把#if 与 #elif之间的code1代码编译进去(注意:是编译进去,不是执行,很平时用的if-else是不一样的)
2> 如果条件1不成立、条件2成立,那么编译器就会把#elif 与 #else之间的code2代码编译进去

3> 如果条件1、2都不成立,那么编译器就会把#else 与 #endif之间的code3编译进去

4> 注意,条件编译结束后,要在最后面加一个#endif,不然后果很严重(自己思考一下后果)

5> #if 和 #elif后面的条件一般是判断宏定义而不是判断变量,因为条件编译是在编译之前做的判断,宏定义也是编译之前定义的,而变量是在运行时才产生的、才有使用的意义   
感觉和if语句类似,不过他们中间放的是代码,而不是语句,可以利用if条件语句来帮助记忆
作者: dawn.dai    时间: 2014-4-22 17:47
本帖最后由 dawn.dai 于 2014-4-22 17:59 编辑

简单说就是代码控制#ifndef   xxx    //如果条件为真就执行括号内的程序,反之不执行#ifdef作用相反
{
#define  xxx
{
//声明、程序
}
}
#endif
你说的这个应该是.h文件里的防重复声明吧,在文件内容很多时,有可能出现声明过又重新申明的,虽然不影响程序运行,但是很多的情况下
会影响性能,所以用这种预处理控制,如果没有声明过才运行声明部分的代码。

作者: 葬花桥    时间: 2014-4-22 19:00
dawn.dai 发表于 2014-4-22 17:47
简单说就是代码控制#ifndef   xxx    //如果条件为真就执行括号内的程序,反之不执行#ifdef作用相反
{
#def ...

明白了,3Q




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2