关于C++ 编译单元的问题

froghui 2004-03-20 09:35:30
a.h
#ifndef A_HH
#define A_HH
int add_2(int i, int j);
#endif

a.c
int add_2(int i, int j)
{
return (i+j);
}

b.c
#include <stdio.h>
#include "a.h"

int main(void)
{
printf("2+3=%d\n", add_2(2,3));
return 0;
}


这样a.c b.c编译形成的a.o b.o的编译单元内(按照C++的标准是.c .cpp这样的资源文件应该是一个编译单元),是不是各自都包含了a.h,换句话说,编译宏定义
#ifndef ....这样的东西是对一个编译单元比如a.c->a.o有效,编译b.c->b.o时这个宏是不是被重新定义了一下。
而且,在b.o中关于add_2()的符号是要到连接时刻在a.o中找到,在C++中,如何区分是一个外部连接(可以在连接时刻找到符号),内部连接呢?
...全文
42 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjp6688 2004-03-21
  • 打赏
  • 举报
回复
建议看看编译原理
oyd 2004-03-20
  • 打赏
  • 举报
回复
agree with lgchao()
lgchao 2004-03-20
  • 打赏
  • 举报
回复
编译单元是指经过预处理后(宏和头文件包含)的文件,所以宏只对所在的源文件有效。
古布 2004-03-20
  • 打赏
  • 举报
回复
1)按约定:const ,typedef默认是内部连接。
无名名字空间相当于内部连接。
2)现式声明使const具有外部连接
// file1.c
extern const int a = 33;
// file2.c
extern const int a;
void f()
{
cout << a; //a 是33

}

64,633

社区成员

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

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