extern int f();与int f();有什么区别?

现在我有两个文件,文件1调用了文件2中的f函数。我发现在文件1中无论用
extern int f();
还是
int f();
进行声明,都可以正确编译。那么两种声明有什么区别?
但是我在文件2中只写了一个函数定义,没有声明,也没有extern。

实际上没有任何区别
函数声明前加extern表示这个函数的实现不在当前文件中(严格地说是编译元),但是不加extern一样会在其他编译元中寻找实现。而加了extern也一样会在当前编译元中寻找。

--

别被误导... C/C++不允许函数重名(基本上也就是脚本语言允许... 后定义的会把先定义的覆盖...)。C++看似有名字一样的函数,只不过把参数表也算在函数名里了。

至于是否规范。起码20年前的stdio.h里的函数声明就已经不带extern了。在每个编译单元单独声明外部函数本身就是自找麻烦的做法|||
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-02-03
文件1调用了文件2中的f函数,应该是文件2的函数声明要用extern
在文件1中调用,不用写extern
第2个回答  2009-02-03
写extern 是比较正规的写法,一是告诉编译器,要建外部链接,二是给读程序的人方便,到另一个程序去看源程序。

现在的编译器比较聪明,找不到函数定义,你不写extern ,它也知道到外面去找。

C++里也许有用,C++可以写同名函数,如果加了extern,编译器就用外边的,不写extern,就用里面的同名函数。

BlueWanderer 对 "正规的写法" 有意见。按Standard ANSI C 的规则:
extern void Factorial (int n);
The keyword extern is optional (i.e. default) for a function prototype.
默认,不写extern,就是extern。
所以,明确写extern 是"正规的写法",也就是C语言的旧传统。

extern int f();与int f();有什么区别?
实际上没有任何区别 函数声明前加extern表示这个函数的实现不在当前文件中(严格地说是编译元),但是不加extern一样会在其他编译元中寻找实现。而加了extern也一样会在当前编译元中寻找。-- 别被误导... C\/C++不允许函数重名(基本上也就是脚本语言允许... 后定义的会把先定义的覆盖...)。C++...

extern这个函数的用法
如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:extern int f(); 和int f();当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修...

extern在函数声明中是什么意思?
extern int f();和 int f();之间并没有实质的区别。

C语言中extern在函数声明中是什么意思?
尽管在函数声明extern int f();和函数定义int f();之间表面上看起来没有区别,但实际上它们代表了不同的阶段。声明是告诉编译器函数的存在,而定义则是提供函数的具体功能和实现。在多个源文件协作的项目中,这种用法尤为常见,有助于模块化编程和避免重复定义。总结来说,extern在函数声明中是指示函数...

C语言 函数声明前extern的用法?
(2)作用相同,不完全等价。区别在哪呢?include “*.h”int f();把“*.h”里的所有东西都搬过来(除了f()之外可能还有其他的),那么肯定包含有f();而extern int f();表示你明确知道你要调用的是“*.h”里的f()这个函数,其它你都不需要。“这么说,如果所有外部函数声明时都加上...

.h与.c文件变量引用问题
2.如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有区别:extern int f(); 和int f();=== 如果定义函数的c\/cpp文件在对应的头文件中声明了定义的函数,那么在其他c\/cpp文件中要使用这些函数,只需要包含这个头文件即可。如果...

c++中的extern修饰符在变量的 声明和定义方面有什么作用
6.函数的声明默认是extern的,如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显区别:extern int f(); 和int f(); 当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,在所有的...

extern用法
extern 都是对全局变量来说的,你既然将a(int)已经定义到了main函数中了,也就是说:a 的作用域就是main了,不然作用域不久不起作用了吗 如果你要将main中的那个int a用到f中,那是不可以的,但是你可以讲a(int)声明(定义)为全局变量,然后用extern就可以了(如果f和main不在一个.cpp中)...

怎样理解extern,const,static的含义和他们之间的关系?
前一个int是指的参数的个数,后一个int指的是返回值的类型。而c的处理是把函数的形式只转换成了_f。在c++函数中调用c函数的时候应该用extern 声明c里的函数,再用extern “c”声明c++里的函数;在c里调用c++的函数的时候在c++里声明extern "C" ,在c里声明extern。2、const的使用a、const 用于...

static和extern的区别
int i=10; \/\/这个是定义一个全局变量,值为10 extern int i=10; \/\/这个是错误的,变量已经存在,怎么赋初值呢?extern int i; \/\/这个和第一句 int i=10; 可以同时存在在一个文件中。再说跨文件(多个编译单元)的:文件一:(假设这个文件没有错误!!)int a=10;文件二:extern int a;...

相似回答