免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4128 | 回复: 10
打印 上一主题 下一主题

#ifndef sth #define sth #endif 这种语法不是多此一举吗?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-11 10:59 |只看该作者 |倒序浏览
为什么要判断一下sth是否被定义了呢??直接define不就可以了吗???

论坛徽章:
0
2 [报告]
发表于 2007-06-11 11:03 |只看该作者
可以防止重复定义............

论坛徽章:
0
3 [报告]
发表于 2007-06-11 15:06 |只看该作者
可是这里没有报警机制啊,怎么确定,先前的#define一定适合现在呢???再说#define的作用域难道是全局吗??

论坛徽章:
0
4 [报告]
发表于 2007-06-11 15:39 |只看该作者
最常用的用法是防止头文件被多次include

论坛徽章:
0
5 [报告]
发表于 2007-06-11 22:05 |只看该作者
These directives are to define a macro but not to override the old one - if it already exists.

论坛徽章:
0
6 [报告]
发表于 2007-06-11 22:08 |只看该作者
.

If you want to explicitly define a macro and override it when it exists, just use the code below:

#ifdef MACRO
#    undef MACRO
#    define MACRO "jurisdiction"
#endif


Think about the difference.

.

论坛徽章:
0
7 [报告]
发表于 2007-06-12 00:07 |只看该作者
楼主的问题的答案是:这样写为了防止头文件重复包含而导致的重复定义。
比如写了一个a.h,里面有一个class的定义。
如果你#include "a.h"两次,这时class的定义就会出现两次导至重复定义,加上#ifndef.. #define.. #endif后,第二次包含a.h时由于指定的符号在第一次包含时已经定义过,所#ifndef的判断为假,里面的东西就会被跳过。
5楼6楼说的是另一个问题了,不过也是很常见的用法,用于保证定义宏是你所要求的。

论坛徽章:
0
8 [报告]
发表于 2007-06-12 20:28 |只看该作者
我替樓主問一下, 如果一個頭文件
a.h

#ifdef a_h
#define a_h


#define sth

#endif

這樣的話, sth還會被定義兩次碼?

论坛徽章:
0
9 [报告]
发表于 2007-06-12 21:08 |只看该作者
原帖由 Arthur_ 于 2007-6-12 20:28 发表于 8楼  
我替樓主問一下, 如果一個頭文件
a.h

#ifdef a_h
#define a_h


#define sth

#endif

這樣的話, sth還會被定義兩次碼?

第一行应该是#ifndef,这样才起作用。不会,因为第二次包含时a_h已经被定义,所以#ifndef a_h判断为false,#ifdef..#endif中的内容都会被忽略。
如果第一行是#ifdef的话,就有大问题了,这个文件不管被包含多少此都跟没包一样(如果别的地方也没定义过a_h的话)。

论坛徽章:
0
10 [报告]
发表于 2007-06-13 09:00 |只看该作者
原帖由 lifanxi 于 2007-6-12 21:08 发表于 9楼  

第一行应该是#ifndef,这样才起作用。不会,因为第二次包含时a_h已经被定义,所以#ifndef a_h判断为false,#ifdef..#endif中的内容都会被忽略。
如果第一行是#ifdef的话,就有大问题了,这个文件不管被包含多 ...



是阿,筆誤

謝謝
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP