c - 为什么在 C 的 header 中使用 extern 关键字?

标签 c extern linkage

这个问题在这里已经有了答案:





How do I use extern to share variables between source files?

(18 个回答)


8年前关闭。




我为什么要使用 extern以下代码中的关键字:

头文件.h

float kFloat; // some say I should write 'extern float kFloat;', but why?

文件.c
#include <stdio.h>
#include "Header.h"

float kFloat = 11.0f;

主程序
#include <stdio.h>
#include "Header.h"

int main(int argc, const char * argv[])
{
    printf("The global var is %.1f\n", kFloat);

    return 0;
}

此代码有效。全局变量 kFloat 默认为外部链接和静态生命周期。

输出为:

The global var is 11.0



我不明白在哪种情况下会出现问题,谁能给我一个崩溃的例子?

最佳答案

extern表示在您要使用的项目(或外部功能 block )中的某处定义了一个变量。它不会为它分配内存,因为您告诉编译器这是在其他地方定义的。

变量必须在程序的模块之一中定义一次。如果没有定义或有多个定义,则会产生错误,可能在链接阶段。

定义是指创建变量或分配存储的地方;声明是指声明变量性质但未分配存储空间的地方。

而且由于它可以在其他地方访问,它需要是静态的。

关于c - 为什么在 C 的 header 中使用 extern 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198855/

相关文章:

C - 如何在没有 string.h 和动态内存分配的情况下连接字符串

java - JNI 在 C 中将 jint 转换为 native int

c++ - C 函数调用 C++ 成员函数 - C 代码是用 C 编译器编译的

c++ - 如何访问 C++ 中其他文件中的静态链接变量?

c - 允许 "overriding"具有内部链接的零初始化对象

c++ - 相同功能的不同实现(c/c++)

c - 简单的字符串递归

c - 如何使宏常量在 C 中可全局访问?

c - 当 actual 和 extern 类型不同时会发生什么?

c++ - extern "C"(C联动)默认