宏问题

liyuan02 2007-02-28 10:41:20
一般我们在文件中可以看到这样的定义:

#ifndef AAA
#define AAA
#endif

这有什么作用 ? 谢谢!
...全文
319 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjjkl81 2007-03-02
  • 打赏
  • 举报
回复
答案已经明了
kprzen 2007-03-02
  • 打赏
  • 举报
回复
我接着解释一下

from 虫子

1 避免重复包含导致的重复定义问题;
比如在 AAA.h 开始处使用这么个宏:
#ifndef AAA_H
#define AAA_H
//这里是头文件的其他内容
#endif

如果下次再有头文件包含了A.h,那么发现AAA_H已经被定义,就直接跳出了,这样就避免了重复包含同一头文件

kprzen 2007-03-02
  • 打赏
  • 举报
回复
jixingzhong(瞌睡虫·星辰)
那里都能看到,时间很充足啊!~ 都4个星星了
我才一个小三角
555555555

至于这个问题么,我搞嵌入式,程序里面经常看到
我的认识和虫子一样
rainertop 2007-03-01
  • 打赏
  • 举报
回复
条件编译
条件编译是指根据给定的条件决定是否编译程序中的某些程序段。当条件满足时,相应的程序段被编译产生目标代码,否则不被编译。条件编译共有三种形式:
(1)
#ifdef 标识符
程序段1
#else
程序段2
#endif
(2)
#ifndef 标识符
程序段1
#else
程序段2
#endif
(3)
#if 表达式
程序段1
#else
程序段2
#endif
jixingzhong 2007-03-01
  • 打赏
  • 举报
回复
这样手段,
通常有两种目的:
1 避免重复包含导致的重复定义问题;
比如在 AAA.h 开始处使用这么个宏:
#ifndef AAA_H
#define AAA_H
//这里是头文件的其他内容
#endif

2 一个标志, 又或者是为了移植性等目的定义的一个宏, 比如 ASSERT宏/DEBUG宏 就是这样的目的
p_zyh 2007-03-01
  • 打赏
  • 举报
回复
确保下面代码编译时AAA已定义
同时不导致重复定义宏
Myu2006 2007-02-28
  • 打赏
  • 举报
回复
避免头文件重复包含

意思是:
如果未曾定义宏AAA
那么定义宏AAA
定义结果

这些一般在头文件里出现,
比如有头文件A.h,头文件B.h,源文件C.cpp
当你在B.h中#include "A.h"
又在C.cpp中
#include "A.h"
#include "B.h"

那么A.h就有可能两次被包含于C.pp中
一次是直接来自C.pp中的这一句:#include "A.h"
一次是间接来自B.h中的这一句:#include "A.h"

但是如果你在A.h中开头有了这样的宏定义:
#ifndef AAA
#define AAA
#endif
那就不会间接地从B.h中又包含一次A.h了
wasoxi 2007-02-28
  • 打赏
  • 举报
回复
http://www.cedn.cn/Article/ShowArticle.asp?ArticleID=1134
wasoxi 2007-02-28
  • 打赏
  • 举报
回复
避免头文件重复包含

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧