首页 > 其他分享 >C语言 | extern关键字

C语言 | extern关键字

时间:2023-08-03 18:56:21浏览次数:27  
标签:定义 函数 C语言 关键字 cpp extern 声明 变量

extern是C语言中的关键字,它会声明一个全局变量或者函数,表明变量或者函数是定义在其他其他文件中的。

定义:表示创建变量或分配存储单元。

声明:说明变量的性质,但并不分配存储单元。

extern int i;			// 只是声明,但没有分配内存空间给变量i
int i;				// 是定义,给变量i分配了4个字节
extern int i = 17;		// 是定义,但使用extern时不应该对变量进行定义

extern往往用来在头文件中声明变量(对于函数而言,如果没有函数体,即{}中的代码,那么就是声明;反之,则为定义。因此,函数的定义与声明很好区分,不需要用到extern),以便在多个.c/.cpp文件中定义和使用该变量。

例如,在a.h文件中声明变量extern map<int, int> mp;,之后可以在a.cpp中定义全局变量map<int,int> mp;(只能在函数外定义),然后再在main.cpp中使用变量mp[0] = 1;

需要注意的是,在头文件中使用extern会声明一个全局变量,之后需要经过定义才能够使用该变量(在任意.cpp文件的全局变量部分定义),而且这个全局变量只能定义一次。

关于多文件编程:在头文件(a.h)中声明 变量/函数/类,然后再在对应的cpp文件(a.cpp)中进行定义(变量,成员/非成员函数的主体),之后再编写main函数以运行代码。

标签:定义,函数,C语言,关键字,cpp,extern,声明,变量
From: https://www.cnblogs.com/C111111/p/17604184.html

相关文章

  • C++ | extern "C" 的用法
    extern"C"是C++中的一种用法(无法在C语言中使用),其作用是修饰一段代码,将其用C语言的方式进行编译。那么,使用C语言方式进行编译与使用C++方式进行编译又有什么区别呢?在C++中,支持函数重载:voidfunc();voidfunc(inta,intb);voidfunc(doublea,floatb);但在C语言中如果......
  • 我的第九次C语言练习
    今天终于学完了弟三章,实际上昨天没剩下多少了,今天主要是在写练习。//intmain(void)//{// inta;// unsignedintb;// a=12;// b='\012';// printf("a=%d,b=%u",a,b);// return0;//}首先试了下unsignedint和正常int的不同,因为书上在打印\012时答案上只显示了unsig......
  • w3c上关于 SQL LEFT JOIN 关键字 这一章的错误
    ================================摘自W3C================================SQLLEFTJOIN关键字LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。LEFTJOIN关键字语法SELECTcolumn_name(s)FROMtable_name1LEFTJOIN......
  • go语言基础-关键字
    go代码中会使用到25个关键字和保留字breakdefaultfuncinterfaceselectcasedefergomapstructchanelsegotopackageswitchconstfallthroughifrangetypecontinueforimportreturnvargo代码经常用到的预定义标识符appendboolbytecapclo......
  • UE5 unresolved external symbol 解决方案
    背景unresolvedexternalsymbol问题是模块代码使用了其他模块,build.cs文件中没有添加对这些模块的依赖问题Error LNK2001 unresolvedexternalsymbol"public:virtualvoid__cdeclUWidget::PreSave(classFObjectPreSaveContext)"(?PreSave@UWidget@@UEAAXVFObjectPreSaveCon......
  • 如何在 React 18 中使用 useSyncExternalStore
    原文useSyncExternalStore是React18中提供的自定义挂钩,可让您订阅外部存储并在外部存储更新时更新您的React组件。它对于订阅不是建立在React状态管理之上的外部存储特别有用。useSyncExternalStoreAPI您应该在组件的顶层调用useSyncExternalStore方法import{useSyncExte......
  • C语言关键字extern。
    extern:声明变量是在其他文件正声明(也可以看做是引用变量):extern用在变量或函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。//文件1代码#include<stdio.h>externvoidlbw();//声明外部lbw()intmain(){ lbw();}//文件2代码#include<stdio.h>voidlbw......
  • volatile关键字剖析
    这里引入一个案例:实现单例模式的双重检查锁packagecom.chunling.cloud.test;publicclassSingleton{privatestaticSingletoninstance;privateintvalue;privateSingleton(){try{Thread.sleep(100);}catch(Interrupted......
  • C语言嵌入式面试
    指针1.数组指针与指针数组,函数指针与指针函数区别?答:函数指针指向函数的指针变量,即本质是一个变量。指针函数是指返回值是指针的函数,即本质是一个函数。数组指针是指向数组首元素的地址的指针,其本质为指针。(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动)指......
  • C语言嵌入式开发
    第一类问题:专业考察题在下面问题中,我附上自己的理解,可能不全面,用到的话再自行补充一些。问题1:问你写在简历上的项目经历,一般问的很细很细,在此基础上考察你项目里用到的技术知识。问题2:IIC协议(1)I2C使用两条线在主控制器和从机之间进行数据通信。一条是SCL(串行时钟线),另外一条......