关键字extern的含义是(怎样理解extern,const,static的含义和他们之间的关系)

本文目录
怎样理解extern,const,static的含义和他们之间的关系
a、声明一个外部变量。注意此刻声明时不能定义该变量。因为在c++里变量只能定义一次。这样做的好处是在其他文件里面可以使用,但此时必须申明它。如:在a文件中声明了 extern int i;在b文件中可以直接使用这个变量,此时可以声明extern int i 告诉编译器这个变量在其他文件中已经声明了。我们平时往往把声明和定义混淆了。往往都是在声明的时候就定义了,这只能在一个文件里面使用,此时的声明就是定于,不能在多个文件里使用同时使用该变量。要在多个文件使用同一个变量的话就可以使用extern来声明。这里还要注意extern和static的区别:extern是文件级的,也就是说多个文件(只要是声明了extern int i的)都可以使用同一个变量。而static只是在文件内部使用,它声明的变量的使用范围相当于是file scope,即在该cpp文件里都可使用, 在应用程序消亡的时候消亡。这里不得不提一下全局变量与前面两者的关系。这三个限制作用域的关键字的区别总的来说是这样的:全局变量,整个应用程序下的所有文件;extern,必须是在都声明的情况下使用同一个变量;static,在单个文件范围内使用。b、用于c,C++之间互相调用函数时使用的。当C++想调用c编写的lib或dll里的文件里的函数时就要使用extern关键字。因为在编译后c和C++编译器多函数的处理方式是不一样的,C++为了重载机制的运行把函数名f()的形式改成了_f_int_int。前一个int是指的参数的个数,后一个int指的是返回值的类型。而c的处理是把函数的形式只转换成了_f。在c++函数中调用c函数的时候应该用extern 声明c里的函数,再用extern “c”声明c++里的函数;在c里调用c++的函数的时候在c++里声明extern "C" ,在c里声明extern。2、const的使用a、const 用于指针的两种情况分析: int const *a; file://a可变,*a不可变 ,int *const a; file://a不可变,*a可变。const 是一个左结合的类型修饰符,它与其左侧的类型修饰符和为一个类型修饰符,所以,int const 限定 *a,不限定a。int *const 限定a,不限定*a。const 限定函数的传递值参数:void fun(const int var);分析:上述写法限定参数在函数体中不可被改变。由值传递的特点可知,var在函数体中的改变。不会影响到函数外部。所以,此限定与函数的使用者无关,仅与函数的编写者有关。结论:最好在函数的内部进行限定,对外部调用者屏蔽,以免引起困惑。const 限定函数的值型返回值:const int fun1();const myclass fun2(); 分析:上述写法限定函数的返回值不可被更新,当函数返回内部的类型时(如fun1),已经是一个数值,当然不可被赋值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回自定义的类型时(如fun2),这个类型仍然包含可以被赋值的变量成员,所以,此时有意义。b. 传递与返回地址: 此种情况最为常见,由地址变量的特点可知,适当使用const,意义昭然。c. const 限定类的成员函数:class classname { public: int fun() const; .....} 注意:采用此种const 后置的形式是一种规定,亦为了不引起混淆。在此函数的声明中和定义中均要使用const,因为const已经成为类型信息的一部分。获得能力:可以操作常量对象。
extern在c语言中是什么意思
extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。
extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:
文档A.cpp调用a.c里面的变量i和函数callme()
相关内容:
C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。
实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
c语言中extern什么意思
c语言中extern通常置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
extern “c“是什么意思
extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。
(1) 被extern "C"限定的函数或变量是extern类型的
extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:
extern int a;
仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数。
与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰。
(2) 被extern "C"修饰的变量和函数是按照C语言方式编译和连接的

更多文章:
excel滚动条怎么调出来(怎么让excel表格显示出滚动条)
2025年11月4日 02:30
电脑网速慢怎么解决 教你优化电脑网络速度的方法?网络优化是怎么回事
2025年11月10日 12:15
take for granted(take for granted是什么意思)
2025年10月21日 02:45
虚拟机安装hadoop步骤(安装hadoop 中vi命令怎么用)
2025年10月28日 10:45
continue语句在循环体中的作用(c语言中continue语句的作用)
2025年9月3日 16:45
wsdl url is not valid(php如何处理wsdl)
2026年3月9日 20:30
字符串长度可以用lenngtn吗js(js中 我在一个函数中定义一个变量赋为值空!)
2025年7月14日 15:45
min height threshold(div固定一个高度,但内容多了又想让div随内容的变化而变化,怎么解决)
2026年1月6日 11:30
git pull和git clone(git的远程分支是干啥的,和本地的有什么区别)
2025年11月24日 03:15
abap开发工程师要懂什么技术(软件开发人员主要做什么工作)
2026年2月25日 10:45














