c++中 extern 是什么含义?

发布网友 发布时间:2022-03-29 08:56

我来回答

7个回答

热心网友 时间:2022-03-29 10:26

用例子给你示范
// 1.cpp
int x = 10;
// 2.cpp 注意没有包含1.cpp
#include <iostream>
using namespace std;
extern int x;
int main ()
{ cout << x << endl; }
//则输出10
两个文件同在一个项目(project)中,你不包含某个文件(cpp)而可以用它内部定义的变量,(里是.pp不是.h, 因为在.h中定义的数据不能在.cpp中用除非这个.cpp包含这个.h文件)
例:
// 1.h
#include <iostream>
void print()
{
std::cout << "hello!" << std::endl;
}
// 2.cpp
#include <iostream>
using namespace std;
// 以上两句在这个例子中可以不要
extern void print();
int main ()
{
print();
}
就会出错因为1.h中的void print();在不包含它的文件中是不可调用的,即使在声明了extern 也于事无补,如果你将这个例子中的1.h名字换成1.cpp就对了!
从这些可以看出来,extern在这里起的作用是告诉编译器,你这个print()已经在某个.cpp中已经定义了,这里只不过是声明一下有这个东西,然后拿来用一下。定义只能出现一次,声明却可出现多次,也就是说extern声明可在多个文件中用(包括.h)
还有,你还可以屏蔽extern声明,如第二个例子中的第二个.cpp文件可以改成
#include <iostream>
using namespace std;
// 这里以上两句不能省略,因为,这里extern void print();函数已经不起作用了,在这里调用的而是本文件中定义的void print()函数,其中用到了cout,endl;他们来源于std::<iostream>
extern void print();
void print()
{
cout << "world!" << endl;
}

int main ()
{
print();
}
// 输出结果为world!
还有一个extern "C"就不用说了,用这个可以允许C++程序中调用C的函数!

热心网友 时间:2022-03-29 11:44

外部连接符号

通常是在定义接口的时候这样使用的
这样的一个声明写在头文件内,供其他文件包含. 这时候extern表示函数的实现部份不在文件内部,在连接的时候统一由连接器处理.

编译器通常会假定编译时候找不到实现部份的函数为extern形式.

当然,加了extern也可以在该文件内写实现

热心网友 时间:2022-03-29 13:18

表示是外部的, 不在这个编译单元里定义

对函数来说没必要写这个. 写不写这个都是extern的, 除非要指定导出格式, 最常见的就是多种语言混合编程经常用到 extern "C" 。
而且也不是说你写了extern就可以在别的什么文件里用它了。 每个编译单元都必须遵守“先声明后使用”的原则

热心网友 时间:2022-03-29 15:10

1.
这个代码是别人写的吧!
应该还有一个附带一个库文件,这样做的目的是为了让他的代码既能用于C语言代码,也能用于C++代码。
2.
#ifdef
__cplusplus
//
如果用C++编译器编译
extern
"C"
{
//
则添加这个修饰符
#endif
//
条件语句结束
void
go();
#ifdef
__cplusplus //
如果用C++编译器编译
} //
则添加一个右大括号
#endif //条件语句结束

热心网友 时间:2022-03-29 17:18

c和c++是两种语言,虽然名字里面都有个c
你在c++里去调用另一种语言的库,那当然是要做特殊的处理
通过条件编译可以把一些代码隐藏掉,你把那些隐藏掉的代码删掉再看,括号还是成对的。

热心网友 时间:2022-03-29 19:42

外部连接符号

热心网友 时间:2022-03-29 22:24

外部变量的意思
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com