关于C中关键字extern的一点困惑
我在网上查了一下关于extern的基本解释是这样的:
================================================================
extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
================================================================
我的理解是只要变量或者函数是在别的文件中定义的,那么要调用的话,一律要在调用前加上extern的申明。
但是我发现一些系统的头文件对函数的申明都是没有加extern的,比如在stdio.h中对printf的申明是这样的(VC++中):
_CRTIMP int __cdecl printf(const char *, ...);
(注:_CRTIMP 已在前面做了如下定义
#define _CRTIMP
)
假如我们在某个文件里include了stdio.h这个头文件,我的理解是对于printf的申明应该是这样的:
int printf(const char *, ...);
也就是说并没有用extern来标示printf的定义是在其它的模块中的。
但为什么我们却可以正常使用呢?
另外,我还在VC++下做了如下的尝试:
(1)在test.cpp中定义了函数void test(void);
(2)在main.cpp中尝试调用函数void test(void),
尝试一:
对函数的申明形式如下:
void test(void);
尝试二:
对函数的申明形式如下:
extern void test(void);
结果是这两次尝试都能成功调用函数,似乎extern的存在与否并不影响函数能否正常被调用,这让我很疑惑。
望高人能点拨一二,以解小弟的困惑,不胜感激!