外部函数原型?

时间:2014-12-12 15:53:07

标签: c extern function-prototypes

my_math.h

// case 1 
unsigned int add_two_numbers(unsigned char a, unsigned char b);

//case 2 
extern unsigned int add_two_numbers(unsigned char a, unsigned char b); 

案例1和案例2有什么区别?我从未使用 extern 来查看函数原型,但查看某人的代码(比我更有经验的人)我在声明函数原型时总是使用 extern 。任何人都可以指出请点差异吗? (或者指向我可以找到具体信息的链接)。谷歌表示,这与外部联系有关。任何人都可以指出一个例子,一个人会工作而另一个人不会吗?

我正在使用嵌入式C(KEIL),如果它有任何区别。

3 个答案:

答案 0 :(得分:7)

extern是全局链接的链接说明符。它的对应部分是static,它指定文件本地链接。由于全局链接是C中的默认链接,因此在声明中添加extern对函数声明没有任何区别。对于变量,它会阻止自动内存分配并使用它是在全局范围内声明变量的唯一方法。

如果你只是谷歌关键字,你会发现许多文章,例如这个: geeks for geeks

答案 1 :(得分:1)

几年前,我从一位经验丰富的程序员那里学到了以下变量:

glo.h:
#ifndef EXTERN
#define EXTERN extern
#endif
...
EXTERN int gMyVar;
...

main.c:
#define EXTERN
#include "glo.h"

“glo.h”任何地方都会声明所有全局变量。 main.c中包含的“glo.h”将为变量分配存储空间。我相信这种方法很常见。

答案 2 :(得分:1)

对于(非inline)函数,它没有任何区别,如果没有给出存储类说明符,则extern是隐式的(注意,这仅适用于函数) ,对象是不同的),所以它只是你使用的风格问题。

我已经看到了两者(从不使用extern用于函数/仅将它用于标题中的声明),也许有些人使用extern来对称使用对象标识符,或者使用它更容易grep外部符号。

选择您喜欢的任何内容并保持一致,但它并没有什么不同。