首页 > 其他分享 >extern myGlobalVar; 为什么可以直接这样用?

extern myGlobalVar; 为什么可以直接这样用?

时间:2024-12-12 18:27:20浏览次数:6  
标签:为什么 省略 变量 myGlobalVar 编译器 类型 extern

在C语言中,extern关键字用于声明一个变量或函数是在程序的其他地方定义的。当你写extern myGlobalVar;时,你实际上是在告诉编译器:“嘿,编译器,我知道这个myGlobalVar变量在程序的其他地方(可能是另一个源文件)已经被定义了,并且我想在这里使用它。”

然而,需要注意的是,这种写法(extern myGlobalVar;)省略了变量的类型。在C90标准中,这种省略类型的写法是不合法的,因为编译器需要知道变量的类型以便正确地处理它。但在C99标准中,如果之前已经通过某种方式(比如通过包含定义了该变量的头文件)让编译器知道了变量的类型,那么这种省略类型的extern声明是被允许的,但它依赖于之前的类型声明。

但在实际编程中,为了清晰和避免潜在的错误,通常建议总是显式地指定变量的类型,即使编译器可能允许省略类型。因此,更标准的写法是:

extern int myGlobalVar;

这样,编译器就明确地知道了myGlobalVar是一个int类型的变量。

如果你直接写extern myGlobalVar;并且它工作了,那么很可能是因为:

  1. 你之前已经通过包含头文件等方式让编译器知道了myGlobalVar的类型。
  2. 你正在使用一个支持这种省略类型的编译器扩展(尽管这不是C标准的一部分)。
  3. 你的代码可能依赖于未定义的行为或特定的编译器行为,这可能会导致在不同的编译器或不同的编译设置下出现错误。

因此,为了编写可移植和健壮的代码,建议始终在extern声明中显式地指定变量的类型。

标签:为什么,省略,变量,myGlobalVar,编译器,类型,extern
From: https://blog.csdn.net/weixin_52307528/article/details/144433281

相关文章

  • MySQL原理解析:MySQL的索引结构为什么使用B+树?
    前言在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。一、二叉查找树(BST):不平衡二叉查找树(BST,BinarySearchTree......
  • 为什么在易优EyouCms中找不到添加TAG标签的地方?
     在易优EyouCms中,添加TAG标签的功能通常位于文章编辑页面的SEO选项卡中。如果您找不到添加TAG标签的地方,可能是由于以下几个原因:未进入SEO选项卡:在文章编辑页面中,默认情况下可能显示的是“基本信息”或其他选项卡。请确保切换到“SEO”选项卡,因为TAG标签的输入框位于这个选......
  • 请问下,居中为什么尽量用transform,而不用margin+left(top)?
    在前端开发中,使用transform:translate(-50%,-50%)来实现居中比使用margin:auto或margin-left/top配合百分比值有几个显著的优势:更灵活,更容易实现垂直居中:margin:auto对于水平居中非常有效,但垂直居中需要父元素有固定高度。而transform:translate可以轻松实现......
  • 现在有一个宏任务,又有一个微任务两者同一层级,在微任务里面又有一个宏任务和一个微任务
    Let'sbreakdowntheexecutionorderinthisJavaScriptscenario.You'redescribingasituationinvolvingtheeventloop,macrotasks,andmicrotasks.Here'sthesetup:Macrotask1(Outer)Microtask1Macrotask2(Inner)Microtask2He......
  • 转载:【AI系统】为什么需要 AI 编译器
    本文将通过探讨AI编译器的黄金年代以及传统编译器与AI编译器的区别等角度,来介绍为什么需要AI编译器。AI编译器黄金年代图灵奖获得者DavidPatterson在2019年5月发表了一个名为“计算机架构新的黄金年代”的演讲,他通过回顾自20世纪60年代以来的计算机架构的发展......
  • 聊一下量子芯片为什么这么牛?
    前几天谷歌发布了一款量子芯片Willow,在互联网上掀起了一阵追捧,其中获得了一众互联网大佬的点赞。包括马斯克和奥特曼等。据说这款芯片解决了量子计算领域三十年来未攻克的难题,并且在5分钟内完成了当今最快的超级计算机需要10²⁵年(这个数字远远超过了宇宙的年龄)才能完成的计算......
  • 方法签名-为什么不同返回类型不算方法重载?
    目录方法签名方法重载的典型使用场景9种方法重载匹配原则5种方法签名方法签名是由:方法名称+参数类型+参数个数 组成的一个唯一值,JVM(Java虚拟机)就是通过这个方法签名来决定调用哪个方法的。从方法签名的组成规则我们可以看出,方法的返回类型不是方法签名的组成......
  • 三相异步电动机为什么能够旋转?
    三相异步电动机,作为一种广泛应用于工业、农业及其他领域的电动机,其工作原理的理解对于工程技术人员以及相关从业者来说至关重要。一、三相异步电动机的基本结构三相异步电动机主要由定子、转子和机壳组成。定子是电动机的静止部分,包含多个电磁线圈,而转子则是可旋转的部分,通常......
  • 为什么说总线伺服比脉冲伺服强?
    在现代工业自动化和精密控制领域,伺服系统无疑是技术发展的前沿。作为自动化控制的核心,伺服系统广泛应用于各种机械设备中,尤其是在高精度、高动态性能要求的应用场景下。总线伺服和脉冲伺服是市场上最常见的两种伺服技术,它们各自的特性、优缺点和适用场景存在着显著差异。然而,在......
  • 转载:【AI系统】为什么需要 AI 编译器
    本文将通过探讨AI编译器的黄金年代以及传统编译器与AI编译器的区别等角度,来介绍为什么需要AI编译器。AI编译器黄金年代图灵奖获得者DavidPatterson在2019年5月发表了一个名为“计算机架构新的黄金年代”的演讲,他通过回顾自20世纪60年代以来的计算机架构的发展......