有一个函数的定义如下:
extern double tcplib_telnet_interarrival();
请问其中的extern是什么含义?
谢谢!
问题补充:
谢谢vbtraz的回答!衷心感谢你花时间回答基础问题。 是不是定义成 extern 后函数在 其他的文件里也可以调用? 我记得谭好强的c语言书里好像是这么写的,而且还说:其实函数的默认就是 定义成 extern,但是一般不写。 我不知道c++是不是这样呢? 另外,让我再看看这个函数的具体位置,可能这里声明成extern是不是有特殊的含义。。。
最佳答案
用例子给你示范
// 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的函数!
提问者对于答案的评价:
谢谢!
相关内容
| • | |
| • | |
| • | |
| • | |
| • | |
其他回答
共 3 条
本文详细解释了C++中extern关键字的用途,特别是在不同编译单元间共享变量和函数时的作用。通过具体示例展示了extern如何帮助实现跨文件的变量及函数引用。
436

被折叠的 条评论
为什么被折叠?



