请问一个静态链接的问题

Mashpawo2 2009-04-11 07:01:12
网上看见一个静态链接的教程 分别写了一个.h和.c作为一个库文件
.h是:
//MyLib.h
#ifndef _MYMATH_H
#define _MYMATH_H
extern "C"
{
int Summary(int n);
}
#endif

.c是:
//MyLib.c

extern "C" int Summary(int n)
{
return n+2;
}


请问在.h中:

#ifndef _MYMATH_H
#define _MYMATH_H
...
#endif

这个“_MYMATH_H”这个是怎么来的?表示什么意思?好像从天而降的字符串 不知道这里为什么要用这个“_MYMATH_H”
上面的这个结构是为了避免“#define _MYMATH_H”被重复定义吗?

本人初学静态链接 小白之处见笑


...全文
74 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
flameearth 2009-04-11
  • 打赏
  • 举报
回复
防止h文件被重复包含
windsting 2009-04-11
  • 打赏
  • 举报
回复
要弄明白这个,先要知道所谓的"ODR(One Definition Rule )",
这个规则的意思是说,在一个编译单元(一般来说是一个源文件)内,
相同的标识符只能被定义一次(说白了就是让编译器别因为一个名字对应俩东西而发蒙),
违反了这个规则的话,编译器就报错,说你有个东西重定义了,然后一般会告诉你第一个定义在哪儿。

OK,ODR说完了,现在说说你问的东西,他实际上是一个防火墙,
保证每个头文件只能被同一个源文件包含一次,第二次包含就不起作用,
从而避免重复定义的问题,在"#ifndef"之后的那个"#define"仅仅能起作用一次,
下次遇到"#ifndef"的时候,该宏就有了定义了,直到下一个"#endif"之间的东西就跟不存在一样。

所以,这东西跟链接静态库木有任何关系,over。
  • 打赏
  • 举报
回复
#ifndef _MYMATH_H
#define _MYMATH_H

....
#endif

在包含mymath.h头文件时,会先检测该头文件是否重复包含了.

这样就可以被任意调用了.
参考这里:

http://blog.csdn.net/c602760495/archive/2008/12/24/3595120.aspx
chenzhp 2009-04-11
  • 打赏
  • 举报
回复
防止重复定义
liliangbao 2009-04-11
  • 打赏
  • 举报
回复
#ifndef _MYMATH_H //表示判断是否没有定义_MYMATH_H宏变量
#define _MYMATH_H //没定义就定义宏变量_MYMATH_H
... //声明....
#endif
//结束
这样做就是防止重定义~
xqls_xqls 2009-04-11
  • 打赏
  • 举报
回复
上面的这个结构是为了避免
#define _MYMATH_H //随便自已定义一般用大写
extern "C"
{
int Summary(int n);
}
被重复定义
newborn2012 2009-04-11
  • 打赏
  • 举报
回复
这个静态链接有什么关系呢,好习惯是头文件都要这么写的,以防止头文件重复包含。
jackyjkchen 2009-04-11
  • 打赏
  • 举报
回复
不是,是为了防止h文件被重复包含,当h文件被调用一次后,#define _MYMATH_H使_MYMATH_H为真,所以再次调用h时,由于#ifndef的存在,#ifndef与#endif之间的部分全部无效

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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