extern和static的正确使用是什么?

时间:2012-03-28 17:56:52

标签: c static call declaration extern

在C中,当在函数上声明externstatic说明符时,正确的语法用法是什么 - 只在声明?在定义?都?变量是否相同?

谢谢!

3 个答案:

答案 0 :(得分:7)

声明extern功能:

关键字extern只应在声明(未定义)函数时使用。注意默认情况下函数具有外部链接,因此函数声明上的关键字extern是多余的。

extern void doSomething();

定义extern功能:

不应使用extern关键字指定函数定义。该定义可以在另一个cpp文件中。

void doSomething()
{
}

声明static功能:
static函数将函数的使用限制在声明它的翻译单元。您需要在声明时指定关键字。

static void doSomething();

定义static功能:
函数定义需要在同一个TU中定义。在定义时,不需要指定static关键字。

void doSomething()
{
}

使用extern变量:
如果要在不同的翻译单元之间共享相同的全局变量,则将变量声明为extern 您需要使用extern关键字声明变量,而需要在一个且只有一个cpp文件中定义它。

<强> file1.h

extern int i;

<强> file1.cpp

#include"file1.h"

int i = 10;

<强> file2.cpp

#include "file1.h"

int main()
{
    i = 40;
    return 0;
}

答案 1 :(得分:0)

static 定义的

内容属于当前编译单元(模块)。 这些东西不在单位外面看到

extern 声明某个其他地方定义的内容

答案 2 :(得分:0)

我不知道on call这个词是什么意思,但我想你想问一下definitiondeclaration

关键字extern表示“此变量/函数在其他位置定义”,因此在定义中使用它是没有意义的。你应该只在申报时使用它。

关键字static(关于函数和全局变量)表示“不导出此符号”,您应该在符号的第一个声明(或定义)上写下它。