精华内容
下载资源
问答
  • extern 关键字的作用

    2019-08-08 12:33:44
    extern关键字一般放置于变量或函数前,用于标示变量或函数定义在别文件中。当编译器遇到此变量和函数时在其他模块中寻找其定义。 1. 当出现extern "C"时候: 主要作用就是为了能够正确实现C++代码调用其他...

    extern关键字一般放置于变量或函数前,用于标示变量或函数的定义在别的文件中。当编译器遇到此变量和函数时在其他模块中寻找其定义。

    1. 当出现extern "C"的时候:

            主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。

         这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,所以要加上extern "C".比如说:

    给出一个我设计的例子:

    A、B两个模块,B调用A中的代码,其中A是用C语言实现的,而B是利用C++实现的,如果想正确让cpp实现的B调用c实现的A,下面给出一种实现方法:

    //A.h头文件

    #ifndef __A_H //对于模块A来说,这个宏是为了防止头文件的重复引用

    #define __A_H

    int fun1(int, int);

    #endif

    //A实现文件A.C //模块A的实现部分并没有改变

    #include "A.h"

    int fun(int a, int b)

    {

    return a+b;

    }

    //B头文件

    #idndef __B_H 

    #define __B_H

    #ifdef __cplusplus //而这一部分就是告诉编译器,如果定义了__cplusplus(即如果是cpp文件,

    extern "C"{ //因为cpp文件默认定义了该宏),则B模块采用C语言方式进行编译

    #include"A.h"

    #endif

    … //其他代码

    #ifdef __cplusplus

    }

    #endif

    #endif

    //B实现文件 B.cpp //B模块的实现也没有改变,只是头文件的设计变化了

    #include"B.h"

    int main()

    {

    cout<<fun(2,3)<<endl;

    }

     

    所以extern "C"实现的是cpp文件对于c文件的兼容。

    2. 另一种情况是对于变量前面声明extern.如:extern int ext_int;

            它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块或其他模块中使用。记住它是一个声明不是定义!也就是说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可,在编译阶段,模块B虽然找不到该函数或变量,但它不会报错,它会在连接时从模块A生成的目标代码中找到此函数
     

    展开全文
  • extern关键字的作用

    2016-08-15 14:41:12
    用一句很贴切话来形容我们的extern关键字就是“外来和尚会念经”extern 是指当前变量或函数不是本源文件内声明,它是外部变量和外部函数,正所谓“外来和尚会念经”,能够很好体现extern价值。...

    用一句很贴切的话来形容我们的extern关键字就是“外来的和尚会念经”

    extern 是指当前变量或函数不是本源文件内声明的,它是外部变量和外部函数,正所谓“外来的和尚会念经”,能够很好的体现extern的价值。当我们在本文件中试图引用一个外部声明的全局变量或者函数的时候,可以在其前面加上extern,表示它是外来的“和尚”

    extern 可以修饰变量和函数,表示该变量或函数在其他的地方被定义(本源文件或其他源文件),在这里声明使用它,这样多个源文件共享变量和函数;多个C源文件的编译是独立的,所以编译器无法判断多个源文件共享的变量的类型是否一致(只能判断变量名和函数名是否一致);等到链接的时候(这个阶段已经不再进程语法检查了),多个源文件编译后的.O文件链接成一个目标文件,如果有一个以上源文件对同一变量进行了初始化则报错。
    1、extern变量名

    在任何函数体外声明或定义变量时,不加extern可能是定义也可能是声明,编译器选择初始化的那个(最多一个地方对它进行了初始化),如果没有初始化则任选其中一个作为定义,其他为声明,但是加extern肯定是声明;如果不想让其它源文件链接到,则需要使用static关键字
    2. extern 函数

    函数默认是外部的(在函数体内或函数体外声明一个外部函数,extern关键字均可以省略)如果不想让其他源文件链接到,在函数前加static关键字。在写程序的时候一定要注意外部函数的参数类型、参数个数和返回值类型,最好保持一致

    宏观的理解:通过上面的分心来看,C程序里,通过函数将功能区分开来。每个函数完成一个功能,而又将一片相关联的功能集合在一个源程序里,这些功能和相关联的功能之间通常要有联系,而这种练习就是通过static和extern进行联系的。

    展开全文
  • 1.const关键字 const关键字修饰的变量是只读的。 如图所示,我们使用const关键字修饰一个关键i的时候,当我们对其进行...extern关键字的作用是声明外部全局变量,一般在.h文件中声明,.m文件中实现。 extern关键字在

    1.const关键字

    const关键字修饰的变量是只读的。

    如图所示,我们使用const关键字修饰一个关键i的时候,当我们对其进行修改时,Xcode也会报错。

    2.static关键字

    (1)修饰局部变量

    作用:只初始化一次,和全局变量有点像,但是作用域不变。看看下面的图,就 明白了

    如图所示,当我们使用static修饰变量i的时候,每次点击的时候,i都+1。

    3.extern关键字

    extern关键字的作用是声明外部全局变量,一般在.h文件中声明,.m文件中实现。

    extern关键字在很多第三方源码中都有用到

    展开全文
  • 它只要有两个作用:当它与“C”一起连用时候,如:extern "C" void fun(int a,int b);则告诉编译器在编译fun这个函数时候按着C规矩去翻译,而不是C++(这与C++重载有关,C++语言支持函数重载,C语言不支持...

    extern置于变量或函数前,用于标示变量或函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。它只要有两个作用:

    822f0fd66cc779a620b62b70e4aa4b4a.png

    当它与“C”一起连用的时候,如:extern "C" void fun(int a,int b);则告诉编译器在编译fun这个函数时候按着C的规矩去翻译,而不是C++的(这与C++的重载有关,C++语言支持函数重载,C语言不支持函数重载,函数被C++编译器编译后在库中的名字与C语言的不同)

    当extern不与“C”在一起修饰变量或函数时,如:extern int g_Int;它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块或其他模块中使用。记住它是一个声明不是定义!也就是说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可,在编译阶段,模块B虽然找不到该函数或变量,但它不会报错,它会在连接时从模块A生成的目标代码中找到此函数。

    展开全文
  • 它只要有两个作用:当它与“C”一起连用时候,如:extern "C" void fun(int a,int b);则告诉编译器在编译fun这个函数时候按着C规矩去翻译,而不是C++(这与C++重载有关,C++语言支持函数重载,C语言不支持...
  • c++ extern关键字的作用

    2021-03-28 02:06:09
    使用该关键字可以将其他文件中定义全局变量导入到当前文件中
  • 定义: 可置于变量或者函数前,以表示变量或者函数定义在别文件中。...被extern关键字声明变量只允许定义一次,但可以在多个文件中声明; 只有当extern声明位于函数外部时,变量才可以进行初始化赋...
  • C语言的关键字共有32个,根据关键字的作用,可分为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。auto:声明自动变量 缺省时编译器默认为autoint:声明整形变量double:声明双精度变量long:...
  • 创建一个变量时候,我们可以通过C语言给出几个关键字指定变量不同生存期,如何给变量分配存储空间,在哪分配空间以及编译器怎样处理这些变量。在谈论这些问题前,先看两个概念“外部变量”和“内部变量”。...
  • extern extern 变量 告诉编译器:“你现在编译文件中,有一个标识符虽然没有在本文件或本文件当前位置中定义,但是它是在别文件中或本文件其它位置... //使用关键字extern声明后可以访问到全局变量及函数 int mai
  • 文章logo一:作用概念通俗讲是全局变量和局部变量区别,对于在函数开头声明自动变量(局部变量)来说,其作用域是声明该变量名函数。不同函数中声明具有相同名字各个局部变量之间没有任何关系。外部...
  • C++中extern关键字的作用

    千次阅读 2017-09-09 10:50:55
    1 基本解释:extern可以置于变量或者函数前,以... 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C规则去翻译相应函数
  • 注意是声明,声明一个变量前面要加上extern 表示它只是声明 具体定义,赋值,可以在cpp文件中操作。 声明一个函数就是只写函数头。也就是没有函数体,大括号就是函数体。 为什么不能定义全局变量和函数呢?因为,...
  • static关键字修饰局部变量时:1、使得局部变量只初始化一次2、局部变量在程序中只有一份内存3、局部变量作用域不变,但是生命周期改变了(程序结束才能销毁)修饰全局变量1、全局变量的作用域仅限当前文件,外部类是...
  • “ 一个人追求目标越高,他才力就发展越快,对社会就越有益。”我们知道C++有三种管理数据内存方式:自动存储、静态...使变量成为静态方式有两种:一种是全局变量,另一种就是用static关键字修饰变量。...
  • “ 一个人追求目标越高,他才力就发展越快,对社会就越有益。”我们知道C++有三种管理数据内存方式:自动存储、静态...使变量成为静态方式有两种:一种是全局变量,另一种就是用static关键字修饰变量。...
  • 作用:声明外部变量。使变量或对象可以被跨文件访问 c++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译。 因此在编译期间,各个文件中定义全局变量互相不透明,也就是说,在...
  • 变量的作用域1、生存期在学习编程的过程中,我曾经认为只要变量离开了其作用域,变量的生存期就结束了。直到最近一段时间重新温习之前学过的知识的时候,才了解到,生存期,是指变量占用内存或者寄存器的时长。根据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,984
精华内容 793
关键字:

extern关键字的作用