c - extern 和 static 的正确用法是什么?

标签 c static call declaration extern

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

谢谢!

最佳答案

声明一个extern函数:

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

extern void doSomething();

定义一个 extern 函数:

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

void doSomething()
{
}

声明一个静态函数:
static 函数将函数的使用限制在声明它的翻译单元中。声明时需要指定关键字。

static void doSomething();

定义一个静态函数:
函数定义需要在同一个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;
}

关于c - extern 和 static 的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9913112/

相关文章:

在一行中转换和引用

Swift:如何指定用于静态方法调用的候选类

Javascript 调用并应用构造函数

java - 同步静态方法与同步类对象

java - 为什么 Java 中的这个存储过程调用不起作用?

android - 通话记录器在 android 10 (Q) 中不起作用

c - 内存间接寻址 movl - 汇编

javascript - 在javascript中读取C程序的输出文件

c - 静态和内联

C++ 编译时和运行时可用的名称属性