(1)在一个文件内声明外部变量。 如果外部变量不在文件开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义之前的函数想引用该外部变量,在应该在引用之前用关键字extern对该变量作“外部变量声明”。
#include
<
iostream
>
using
namespace
std;
int
main(
int
argc;
char
*
argv[])
...
{
extern a;
cout << a << endl;
}

int
a
=
5
;
(2) 在多文件的程序中声明外部变量。例如:1.cpp 2.cpp 在一个工程里面,编译的时候是一起编译的。
//
1.cpp
#include
<
iostream
>
using
namespace
std;
int
main(
int
argc,
char
*
argv[])
...
{
extern c;
cout << c << endl;
return 0;
}
//
2.cpp
#ifndef __FILE_2CPP_
#define
__FILE_2CPP_
#define
__FILE_2CPP_
int c = 1;
#endif
#endif
如果按照下面的写法,就不需了extern了。
//
1.cpp
#include
<
iostream
>
#include "1.h"
using
namespace
std;

int
main(
int
argc,
char
*
argv[])

...
{
cout << c << endl;
return 0;
}
using
namespace
std;
int
main(
int
argc,
char
*
argv[])
...
{
cout << c << endl;
return 0;
}
//
1.h
#ifndef __FILE_1HHH
#define
__FILE_1HHH
int c = 1;
#endif
#endif
(3)extern “C”
在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?
答案与分析:
C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。
下面是一个标准的写法:
//
在.h文件的头上
#ifdef __cplusplus
#if
__cplusplus

extern
"
C
"
...
{
#endif
#endif /* __cplusplus */
…
…
//.h文件结束的地方
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
/* __cplusplus */
7694

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



