在C中,当在函数上声明extern
或static
说明符时,正确的语法用法是什么 -
只在声明?在定义?都?变量是否相同?
谢谢!
答案 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)
内容属于当前编译单元(模块)。 这些东西不在单位外面看到
extern 声明某个其他地方定义的内容
答案 2 :(得分:0)
我不知道on call
这个词是什么意思,但我想你想问一下definition
和declaration
。
关键字extern
表示“此变量/函数在其他位置定义”,因此在定义中使用它是没有意义的。你应该只在申报时使用它。
关键字static
(关于函数和全局变量)表示“不导出此符号”,您应该在符号的第一个声明(或定义)上写下它。