设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
#ifndef的用法
返回列表
发新帖
#ifndef的用法
[复制链接]
11
|
4
|
2018-11-28 13:49:57
|
显示全部楼层
|
阅读模式
#ifndef是宏定义里面的一种,用来防止防止头文件的重复包含和编译。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。如果把头文件的内容都放在#ifndef和#endif中,不管你的头文件会不会被多个文件引用,你都要加上这个,就可以避免冲突的问题。#ifndef可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种——条件编译。 C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。扩展资料:#ifndef一般格式是这样的:#ifndef #define ......#endif在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h#ifndef _STDIO_H_#define _STDIO_H_......#endif参考资料来源:百度百科-#ifndef
回复
使用道具
举报
千问
|
2018-11-28 13:49:57
|
显示全部楼层
文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: #ifndef#define...... ...... #endif 在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h #ifndef _STDIO_H_ #define _STDIO_H_ ...... #endif 2.在#ifndef中定义变量出现的问题(一般不定义在#ifndef中)。#ifndef AAA#define AAA...int i;...#endif里面有一个变量定义在vc中链接时就出现了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中定义#ifndef __X_H__#define __X_H__extern int i;#endif //__X_H__int i;注意问题:变量一般不要定义在.h文件中。
回复
使用道具
举报
千问
|
2018-11-28 13:49:57
|
显示全部楼层
#ifndef起到的效果是防止一个源文件两次包含同一个头文件,而不是防止两个源...
回复
使用道具
举报
千问
|
2018-11-28 13:49:57
|
显示全部楼层
好的情况下翻译过来就可以用。用#pragma once啊,你那种用法已经过时了。
回复
使用道具
举报
千问
|
2018-11-28 13:49:57
|
显示全部楼层
路过
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行
1
35岁的女人可以从事哪些职业
2
电脑上怎么让音响耳机同时使用
3
请问从哪里可以下载到一些可爱的熊的图片?
4
第一次和异性见面应该说些什么?
5
水瓶座的人这个月运势如何?
6
求免费杀毒软件下载!!!
7
魔羯座的女生怎样才能和她最爱的人在一起呢?
8
VCD1.1与VCD2.0的区别是什么?
9
我无法使用WIN+E,弹出对话框说是被系统管理员限制,我想知道应该怎么解除?
10
纯平显示器用什么清理比较好/?
11
何谓自应力?
12
〈〈〈我需要你的帮助〉〉〉〉
13
急!!!关于发票问题!
14
细菌性前列腺炎与非细菌性前列腺炎哪个好治疗
15
为何宁可把问题放在心理,也不让别人知道?
16
无助(我该怎么办)
17
网络中的特洛伊怎么杀啊?
18
如何观看韩剧《巴黎恋人》?
19
进来参考一下。。。
20
各位能帮我把 汉语“我爱你”翻译成韩语么??怎么念怎么写啊/谢谢!
21
公司买发票和刻财务章的费用是属于哪个科目
22
科学家是怎么测量质量的大小?
23
没有分区软件 怎样把C\D\E\盘占用比例重新分配?
24
写好对联的方法?
25
关于羊皮卷
26
请教:如何将瑞星的小狮子关掉?设置在哪里?
27
赤橙黄绿青蓝紫 下一句是什么?
28
电脑无法启动
29
三国立志传2战斗中使用锦廊加经验值吗 刘备几级是一级伯爵
30
哪种小狗属于性格温柔的小狗啊??
31
开窗多长时间可预防电脑辐射
32
原森林狼队的斯普雷威尔现在在哪个队?
33
“谢”的这个姓氏的来源
34
各位仁兄,帮帮忙!急!
35
请高手指点,我是菜鸟
36
天通苑附近哪个健身房比较好呢?
37
我到底要不要原谅她的所作所为?
38
如何将硬盘上的图片发送到网上
39
昂达的mp3到底怎么样?
40
谢谢各位
41
沙僧和猪八戒的性格特点
42
由深圳开车去岳阳怎么走
43
衣服如何缩水?
44
一般企业元旦放几天假呢 是不是四号上班
45
真三国无双里关羽和周渝的十级武器怎么拿啊~!
46
哪位朋友有热血传奇金牌帐号的序列号啊 ?>
47
为什么要考试了我反而松懈了??
48
为什么起机到了Verifying DMI pool DATA就卡住了
49
中国足球为什么不能像韩国一样出色?
50
怎样才能让屁股大起来
51
猫为何有九条命啊
52
一般的人造卫星离地球有多高?
53
电脑关机后,为啥时钟会继续走?
54
夏新 D8和自己的计算机(XP)
55
郑州市火车站到107国道坐公交车应该怎样走
56
什么是极光?
57
开火锅店挣钱吗?
58
请问系统硬盘留有多大空间比较合适
59
儿子出世了啦!谁替我起个名?
60
2051次(大连-牡丹江)靠窗座位的号码一般是什么号?
61
我女朋友问我,在不在乎她是处女,我应该怎么回答她??????
62
有哪位同胞知道韩国电视剧<<美丽人生>>的下载地址
63
我的所有播放器播放WMV格式影片花屏,换了很多显卡驱动,还是不行
64
为什么把男同性恋称为同志
65
系统优化大师该怎么样注册~~有没有注册机的啊
66
老师讲过的数学题,很简单,但我忘了怎么做……
67
请计算机行业过来人向我传几点经验!
68
请问人如果压力太大会怎么样呢?
69
一种可以刺激截瘫患者不停走路防止肌肉僵化的机器叫什么名字?
70
请问高血压在日常生活中如何防护?
71
彩色显示器黑白了 哪里出毛病了 求解!!
72
石家庄人去龙岩语言有障碍吗
73
怎么能将电脑和电视连接
74
这是谁??
75
我经常会说梦话~`是怎么回事
76
更改mp3信息。
77
请翻译一下这个句子。(日语)
78
有谁知道波导D660和夏新M630哪个好啊
79
黑头发有什么好处?
80
我是网管,如何区分网络中硬件引起的广播风暴和黑客入侵,或者是蠕虫病毒
81
淘宝网里面那些卖QQ会员的都是什么人?是否可信?
82
国内的服装设计学校哪一所比较好?
83
常常把不是问题的日常现象当问题而忧虑,为何?
84
请各位帮帮忙为什么我打开了一个网站,在网站里点击一个新的网页,却打不开呢?
85
迅雷下一半的东西删除了怎么恢复
86
初二数学题
87
请大虾帮我安装AutoCAD2006
88
帮帮忙找歌
89
GBA恶魔之夜涛剑物语功略?
90
为什么有的论坛会突然消失
91
侠盗车手 罪恶都市哪儿有下载的啊?
92
IE浏览器有几种 ?firefox能用吗?
93
汤泡饭吃好不好?
94
购买的印花税500元怎么做分录
95
CS机器人在哪下?
96
哲学就是怀疑
97
讥笑的反义词
98
请告诉我,一般怎么才能见到周杰伦?
99
新年好,谁知道linux怎么改变输入法?
100
三国群英传5