A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gxppq 中级黑马   /  2014-12-23 20:38  /  1276 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在预处理命令中的文件包含中,我们为了防止重复编译会用下面宏命令和条件编译的结合:
  1. #ifndef include____Header_h
  2. #define include____Header_h

  3. #endif
复制代码

我想问一下,____Header_h是什么意思?特别是有“___”,它有特别的含义吗?如果写成#ifndef include “one.h”我能懂,写成上面的形式我不太明白。麻烦各位朋友给讲解一下。谢谢~

4 个回复

倒序浏览
没有强制要求 就是宏名 但是为了规范点一般是 文件名大写加_ 例如:
#ifndef _ONE_H_
#define _ONE_H_
/* 我是内容 */
#endif
回复 使用道具 举报
从今以后 发表于 2014-12-23 20:59
没有强制要求 就是宏名 但是为了规范点一般是 文件名大写加_ 例如:
#ifndef _ONE_H_
#define _ONE_H_

你的意思是写成#ifndef include “one.h”与写成#ifndef _ONE_H_是一样的?"_"没有特别的含义吗?大小写一样,"."和"_"也不对应,程序能识别吗?还有就是如果#ifndef include “one.h”这么写是可以的,为什么还要写成#ifndef _ONE_H_?
问题有点多,多谢了~
回复 使用道具 举报
gxppq 发表于 2014-12-23 22:09
你的意思是写成#ifndef include “one.h”与写成#ifndef _ONE_H_是一样的?"_"没有特别的含义吗?大小写 ...

这个是防止重复包含的,第一次包含过去因为没有定义宏xxx,所以就定义一个,然后编译下面的代码;
第二次如果不小心又包含过去,因为定义过宏xxx,条件不成立了,后面代码就不编译了。
_ONE_H_就是个宏定义的宏名,宏名一般都是大写,_什么的都是为了规范化才写成这样的。
回复 使用道具 举报
gxppq 发表于 2014-12-23 22:09
你的意思是写成#ifndef include “one.h”与写成#ifndef _ONE_H_是一样的?"_"没有特别的含义吗?大小写 ...

条件编译,就是为了检验.h文件是否重复编译,你所说的#ifndef include "one.h"麻烦且不规范(语法对吗?),直接以文件名命名一个宏名,因为文件名是独一无二的,所以通过条件编译文件名命名的宏,来检验.h文件是否编译了一次。当然你也可以不用文件名命名为宏名,你也可以用合法的标志符也可以,只不过不规范而已。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马