各位老铁们,大家好,今天由我来为大家分享extern的用法,以及C语言中的extern关键字是怎么用的老师说还有个与它对应的关键字,是哪个啊的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
C++模板中的export怎样使用
macro在C/C++编程语言中往往是用来表示的“宏”这个概念,而export单词的意思表示是从外部引入的(变量、函数、宏等),总起来说就是提示这是一个外部的宏,这个叫做前缀,是变量命名中常见的方法,可以提示变量、函数、宏的类型、用途等。之所以EXPORT_MACRO的字母全部是大写,是因为定义宏名称都是用全英文字母大写来定义的。
externstr函数怎么用
通达信引用函数EXTERNSTR
类型:引用函数
功能:引用自定义外部字符串数据
描述:用法:EXTERNSTR(TYPE,ID);TYPE为1表示是系统保留数据,TYPE为0表示是自定义外部数据,读取signals目录下面的的extern_user.txt,请用自定义数据管理器来维护。
extern能修饰float型吗
可以。全局变量是在函数外部定义的变量,不属于任何一个函数,而属于一个原程序文件,其作用域从定义一全局变量开始到原程序文件结束。
在函数中使用全局变量一般应做全局变量说明。只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在函数定义之前定义的全局变量,在该函数内不需要说明。
usleepc语言
linuxC函数定义:voidusleep(intmicro_seconds);把进程挂起一段时间,单位是微秒(百万分之一秒);头文件unistd.hsleep原型:externvoidsleep(unsignedintsec);用法:#include
pow函数的用法
原型:externfloatpow(floatx,floaty);用法:#include<math.h>功能:计算x的y次幂。说明:x应大于零,返回幂指数的结果。举例://pow.c#include<syslib.h>#include<math.h>main(){clrscr()
;//clearscreentextmode(0x00)
;//6linesperLCDscreenprintf("4^5=%f",pow(4.,5.));getchar();return0;}
C语言中的extern关键字是怎么用的老师说还有个与它对应的关键字,是哪个啊
谢邀。
在回答这个问题之前,题主应该明白,实际上程序员的工作就是把一个较复杂的需求,分解成若干个较独立的模块,然后继续把每个模块分解成若干更简单的工作,并编写C语言代码逐个实现,最后再合并完成需求。
在实际的C语言程序开发中,每一个独立模块单独占用一个文件是合适的,extern关键字正好可以方便程序员进行多文件编程。
例如在某个项目中,text.c负责处理文本,picture.c负责处理图片,video.c负责处理视频。整个项目的构成一目了然,维护很方便。多文件编程我们从实例出发,建立
fun.c
文件,接下来自定义函数的C语言代码都在此文件编写。再建立main.c
文件,main()函数的代码编写在此文件中,文件布局如下图,请看:然后在fun.c文件里定义add()函数和全局变量cnt,相关C语言代码如下,请看:
再在main.c文件里的main()函数中调用add()函数,相关C语言代码如下:
编译并执行这段C语言代码,得到如下输出结果:
虽然程序按照预期执行了,但是应该能在编译时发现警告信息:
这是因为编译器在处理add()函数调用时没有找到add()函数的原型,只能根据add(3,4)函数调用“推测”隐式声明:
所幸编译器“推测”正确,因此C语言程序得以正常执行。
C语言编译器为什么需要函数原型?这是因为编译器必须知道函数的参数类型和个数,以及返回值的类型,才能知道该生成什么样的指令。
那为什么不从函数调用的隐式声明中“推测”呢?这是因为并不是所有情况编译器都能“推测”正确的,一旦编译器“推测”错误,要么C语言程序无法编译通过,要么无法得到预期结果。
例如,add()函数的形参都是int型的,实际上我们也能传入char型实参,这时编译器就无法获得正确的参数类型了。
对于printf()这种参数可变的函数,编译器就更不能确定它的参数类型了。另外,函数的返回值类型,编译器也往往无法正确获得。
既然如此,为什么编译器不自己去搜索函数的定义呢?这是因为编译器不知道去哪里找,例如我们在main.c里调用的add函数在fun.c里,编译器又怎么会知道呢?
extern和static关键字extern的字面意思是“外部的”,它是C语言中的一个关键字,表示“外部符号”。你已经知道C语言编译器需要知道函数的原型,所以在
main.c
中,正确的做法应该是下面这样的,请看相关C语言代码:这样编译器就知道add()函数的原型了,也知道它来自于外部文件。实际上,函数声明中的extern也可以不写,不过不写extern仍然表示add函数是外部符号。
应该注意到fun.c文件里有个全局变量cnt,我们能否在main.c中使用呢?答案是肯定的,使用extern引入定义就可以了。
引入外部变量时,extern不能省略。externintcnt;不是定义变量,因此不会为cnt分配空间。另外,在fun.c中,我们可以把cnt初始化为0:
而在main.c中,则不能再对cnt做初始化,下面这种做法是非法的,编译器会报错:
如果不写extern,意思就变了,intcnt;显然表示定义了一个变量。如果不希望外界使用本文件里定义的函数,或者变量,该怎么办呢?答案是使用static关键字(这个就是题目中说的“与extern对应的关键字”)。
以前题主可能使用过static来定义静态变量,它其实还表示变量或者函数属于“内部符号”(extern则表示“外部符号”),有static修饰的全局变量和函数在外部文件中都是不可见的。
这时,cnt和add()函数只能在fun.c文件中使用,在main.c中即使使用extern也是不能访问cnt和add()函数的。
可见,因为C语言有了extern(“外部符号”)和static(“内部符号”)关键字,所以我们可以在不同的文件里定义不同的模块时,就能方便的控制变量或者函数的访问范围了。
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。
OK,关于extern的用法和C语言中的extern关键字是怎么用的老师说还有个与它对应的关键字,是哪个啊的内容到此结束了,希望对大家有所帮助。