#ifndef与#define与#endif

来源:互联网 发布:sem广告投放优化师 编辑:程序博客网 时间:2024/04/30 18:18

1.#ifndef 在头文件中的作用


     在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时

,就会出现大量“重定义”的错误。在头文件中实用#ifndef #define #endif能避免头文件的重定义。


一般格式:


#ifndef <标识>
#define <标识>
......
#endif


    <标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头
文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线。


方法:

例如要编写头文件test.h

在头文件开头写上两行:

#ifndef _TEST_H

#define _TEST_H//一般是文件名的大写

头文件结尾写上一行:

#endif


     这样一个工程文件里同时包含两个test.h时,就不会出现重定义的错误了。

        分析:当第一次包含test.h时,由于没有定义_TEST_H,条件为真,这样就会包含(执行)#ifndef _TEST_H和

#endif之间的代码,当第二次包含test.h时前面一次已经定义了_TEST_H,条件为假,#ifndef _TEST_H和#endif之间的代码也就不会再次被包含,这样就避免了重定义了。


       建议把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。


2.在#ifndef中定义变量出现的问题(一般不定义在#ifndef中

#ifndef AAA
#define AAA
...
int i;
...
#endif


里面有一个变量定义
在c++中链接时就出现了i重复定义的错误,而在c中成功编译。

结论:
        (1).当你第一个使用这个头的.cpp文件生成.obj的时候,int i 在里面定义了当另外一个使用这个的.cpp再次[单独
]生成.obj的时候,int i 又被定义然后两个obj被另外一个.cpp也include 这个头的,连接在一起,就会出现重复定义.

       (2).把源程序文件扩展名改成.c后,VC按照C语言的语法对源程序进行编译,而不是C++。在C语言中,若是遇到多个int i,则自动认为其中一个是定义,其他的是声明。

       (3).C语言和C++语言连接结果不同,可能(猜测)时在进行编译的时候,C++语言将全局变量默认为强符号,所以连接出错。C语言则依照是否初始化进行强弱的判断的。


解决方法:
(1).把源程序文件扩展名改成.c。
(2).推荐解决方案:
.h中只声明 extern int i;在.cpp中定义
<x.h>


#ifndef __X_H__
#define __X_H__
extern int i;
#endif //__X_H__


< x.c>
int i;


注意问题:
        (1).变量一般不要定义在.h文件中。
一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就

是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条

件不满足时则编译另一组语句。
条件编译命令最常见的形式为:


#ifdef 标识符
程序段1
#else
程序段2
#endif


      它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。其中
#else部分也可以没有,即:


#ifdef
程序段1
#denif


       这里的“程序段”可以是语句组,也可以是命令行。这种条件编译可以提高C源程序的通用性。如果一个C源程序在不同计算机系统上系统上运行,而不同的计算机又有一定的差异。例如,我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译:


#ifdef WINDOWS
#define MYTYPE long
#else
#define MYTYPE float
#endif

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 偷油婆 老鼠偷油 老鼠偷油图片 偷油怎么判刑 小老鼠上灯台偷油吃下不来 偷渡近义词 偷渡 偷渡的意思 偷渡缅甸 偷渡阴平 偷渡是什么意思 偷渡什么意思 偷渡的近义词 偷渡被逮住怎么办 偷渡到缅甸一般都干嘛 中国偷渡到缅甸危险吗 时空偷渡之洪荒 偷渡去缅甸被逮住有什么后果 怎么偷渡去缅甸 偷渡被抓会怎么样 偷渡去越南抓到后果 偷渡女人河 原来如此 墨西哥人为什么要偷渡到美国 言帅偷狗 鼠偷狗盗 偷狗药配方 偷狗 摸鸡偷狗 车库偷钱让狗望风 农村偷狗用的药是什么药 偷瞄轻娱乐 梁紫晨偷瞄看葛佳慧 偷税漏税 偷税 偷税漏税罪 偷税罪 偷税明星 偷税罪量刑 偷税漏税处罚 偷税漏税的处罚 偷税漏税处罚标准2019