为什么在C的标头中使用extern关键字?

二元

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

头文件

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

文件

#include <stdio.h>
#include "Header.h"

float kFloat = 11.0f;

main.c

#include <stdio.h>
#include "Header.h"

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

    return 0;
}

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

输出为:

全局变量为11.0

我不知道在哪种情况下会发生问题,有人可以给我举个例子说明它会崩溃吗?

extern float kFloat;

声明kFloat而未定义。

但:

float kFloat;

还声明kFloat不过是一个试探性的定义kFloat

添加extern只是抑制了暂定定义。在头文件中,您只需要声明,而不需要定义。

如果临时定义包含在多个源文件中,您将最终对同一对象具有多个定义,这在C语言中是未定义的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么C ++编译器允许将extern关键字与定义结合使用?

来自分类Dev

为什么要在Java中使用`transient`关键字?

来自分类Dev

为什么在活动模式中使用关键字“内联”?

来自分类Dev

为什么在Vue Project中使用“ get”关键字?

来自分类Dev

为什么在构造函数中使用此关键字

来自分类Dev

为什么在angular js中使用abstract关键字?

来自分类Dev

为什么需要在Objective-C中使用@property关键字?

来自分类Dev

在C ++中使用C关键字

来自分类Dev

为什么在C语言的标头中使用'#'符号?为什么没有其他符号?

来自分类Dev

C中的extern关键字

来自分类Dev

为什么在Swift变量声明中使用关键字“ get”?

来自分类Dev

为什么在Jon Skeet的书中的示例中使用了内部关键字?

来自分类Dev

为什么有人在循环宏中的子句中使用关键字?

来自分类Dev

为什么我们不能在接口方法声明中使用synced关键字

来自分类Dev

为什么在tabs.js中使用new关键字

来自分类Dev

为什么要在Elixir中使用do / else关键字呢?

来自分类Dev

为什么我们仍然在Groovy / Grails中使用package关键字?

来自分类Dev

为什么在Perl modulino中断测试中使用'package'关键字?

来自分类Dev

为什么在Swift变量声明中使用关键字“ get”?

来自分类Dev

为什么在 UPDATE SET 中使用 AND 关键字时 MySQL 不会抛出错误

来自分类Dev

为什么我不能在 rxjs .let() 操作中使用“this”关键字?

来自分类Dev

为什么在带有 dict 的 if 语句中使用关键字“and”会出现逻辑错误?

来自分类Dev

为什么 C++ 中的关键字 struct 与 C 中的关键字 struct 不同?

来自分类Dev

在 TypeScript 中使用“is”关键字有什么好处?

来自分类Dev

为什么strict关键字不属于C ++?

来自分类Dev

C ++-为什么这里需要'template'关键字?

来自分类Dev

为什么inline关键字在C ++中存在?

来自分类Dev

为什么strict关键字不属于C ++?

来自分类Dev

为什么C关键字区分大小写?

Related 相关文章

  1. 1

    为什么C ++编译器允许将extern关键字与定义结合使用?

  2. 2

    为什么要在Java中使用`transient`关键字?

  3. 3

    为什么在活动模式中使用关键字“内联”?

  4. 4

    为什么在Vue Project中使用“ get”关键字?

  5. 5

    为什么在构造函数中使用此关键字

  6. 6

    为什么在angular js中使用abstract关键字?

  7. 7

    为什么需要在Objective-C中使用@property关键字?

  8. 8

    在C ++中使用C关键字

  9. 9

    为什么在C语言的标头中使用'#'符号?为什么没有其他符号?

  10. 10

    C中的extern关键字

  11. 11

    为什么在Swift变量声明中使用关键字“ get”?

  12. 12

    为什么在Jon Skeet的书中的示例中使用了内部关键字?

  13. 13

    为什么有人在循环宏中的子句中使用关键字?

  14. 14

    为什么我们不能在接口方法声明中使用synced关键字

  15. 15

    为什么在tabs.js中使用new关键字

  16. 16

    为什么要在Elixir中使用do / else关键字呢?

  17. 17

    为什么我们仍然在Groovy / Grails中使用package关键字?

  18. 18

    为什么在Perl modulino中断测试中使用'package'关键字?

  19. 19

    为什么在Swift变量声明中使用关键字“ get”?

  20. 20

    为什么在 UPDATE SET 中使用 AND 关键字时 MySQL 不会抛出错误

  21. 21

    为什么我不能在 rxjs .let() 操作中使用“this”关键字?

  22. 22

    为什么在带有 dict 的 if 语句中使用关键字“and”会出现逻辑错误?

  23. 23

    为什么 C++ 中的关键字 struct 与 C 中的关键字 struct 不同?

  24. 24

    在 TypeScript 中使用“is”关键字有什么好处?

  25. 25

    为什么strict关键字不属于C ++?

  26. 26

    C ++-为什么这里需要'template'关键字?

  27. 27

    为什么inline关键字在C ++中存在?

  28. 28

    为什么strict关键字不属于C ++?

  29. 29

    为什么C关键字区分大小写?

热门标签

归档