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

win*_*all 3 c static declaration call extern

在C中,当在函数上声明externstatic说明符时,正确的语法用法是什么 - 仅在声明时?在定义?都?变量是一样的吗?

谢谢!

Alo*_*ave 7

声明一个extern函数:

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

extern void doSomething();
Run Code Online (Sandbox Code Playgroud)

定义一个extern函数:

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

void doSomething()
{
}
Run Code Online (Sandbox Code Playgroud)

声明static函数:函数
static函数的使用限制为声明它的转换单元.您需要在声明时指定关键字.

static void doSomething();
Run Code Online (Sandbox Code Playgroud)

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

void doSomething()
{
}
Run Code Online (Sandbox Code Playgroud)

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

file1.h

extern int i;
Run Code Online (Sandbox Code Playgroud)

file1.cpp

#include"file1.h"

int i = 10;
Run Code Online (Sandbox Code Playgroud)

file2.cpp

#include "file1.h"

int main()
{
    i = 40;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 使用变量时也可以使用'extern'.这里有一个很好的原因/ http://stackoverflow.com/questions/1433204/what-are-extern-variables-in-c (2认同)