在C语言中头文件的extern是什么意思呢?

作者&投稿:野解 (若有异议请与网页底部的电邮联系)
C语言中extern的意思是什么?~

extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。
extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:
文档A.cpp调用a.c里面的变量i和函数callme()

拓展资料1、可以通过把原函数名与参数信息结合,产生一个独特的内部名字,这种技术叫做名字修饰(Name Mangling)。名字修饰规则没有一个标准,所以不同的编译器的名字修饰规则也不一样。
下面是一组函数,其中f()函数重载了:

f(void)和f(int)是不同的函数,除了函数名相同以外没有任何关系。当生成obj目标文件时,为了区分它们,C++编译器根据参数信息进行了名字修饰:

2、C语言中没有名字修饰(Name Mangling),因为C语言不支持函数重载。但是如果C++中含有C代码,在编译时C++编译器对C代码的函数也会进行名字修饰,函数名变了以后,将导致在C运行库中找不到对应函数,发生链接错误。

为了防止C++编译器对C代码进行名字修饰,我们将C代码用extern “C”进行链接指定,告诉编译器,在生成中间文件时,不要对这部分代码进行名字修饰,而是生成符合C规则的中间符号名。

添加了extern “C”链接指示后,上面的代码就能够正常运行了。

extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。
extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:
文档A.cpp调用a.c里面的变量i和函数callme()

拓展资料1、可以通过把原函数名与参数信息结合,产生一个独特的内部名字,这种技术叫做名字修饰(Name Mangling)。名字修饰规则没有一个标准,所以不同的编译器的名字修饰规则也不一样。
下面是一组函数,其中f()函数重载了:

f(void)和f(int)是不同的函数,除了函数名相同以外没有任何关系。当生成obj目标文件时,为了区分它们,C++编译器根据参数信息进行了名字修饰:

2、C语言中没有名字修饰(Name Mangling),因为C语言不支持函数重载。但是如果C++中含有C代码,在编译时C++编译器对C代码的函数也会进行名字修饰,函数名变了以后,将导致在C运行库中找不到对应函数,发生链接错误。

为了防止C++编译器对C代码进行名字修饰,我们将C代码用extern “C”进行链接指定,告诉编译器,在生成中间文件时,不要对这部分代码进行名字修饰,而是生成符合C规则的中间符号名。

添加了extern “C”链接指示后,上面的代码就能够正常运行了。

  1. 是一个修饰符,在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。

  2. 在头文件中声明函数时,前面的extern可有可无,只要这些函数曾在某个.c文件中实现就行了,不过一些函数没有在所包含的头文件中给出声明,同时函数的定义位于其它文件中,这时候使用该函数的.c文件必须用extern标记该函数为外部函数。例子:

    /* c.h */
    extern int max(int a, int b);
    extern int min(int a, int b);
    /* a.c */
    #include <stdio.h>
    /* 这里需要明确指定output为extern函数 */
    extern void output();
    int max(int a, int b)
    {
     return (a > b ? a : b);
    }
    int min(int a, int b)
    {
     return (a < b ? a : b);
    }
    void main()
    {
     output();
    }
    /* b.c */
    #include "c.h"
    void output()
    {
     printf("%d %d
    ", max(10, 5), min(10, 5));
    }


1 extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。
2 extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。
C和C++对函数的处理方式不同

extern "C" 能够使用C写作的库文件的一个手段,如果要对编译器,提示使用C的方式来处理的话 就要使用 extern "C" 来说明
/*c语言头文件:cExample.h */
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
extern int add(int x,int y);
#endif
//c++实现文件,调用add:cppFile.cpp
extern "C"
{
#include "cExample.h"
}

1.头文件中不可以放变量的定义!一般头文件中只是放变量的声明,因为头文件要被其他文件包含#include,如果把定义放在头文件的话,就不能避免多次定义变量。C++不允许多次定义变量,一个程序中对指定变量的定义只有一次,声明可以无数次。
三个例外:1)值在编译时就已知的const变量的定义可放在头文件中,如:const int num=10;
          2)类的定义可放在头文件中。
          3)inline函数。
2.定义和声明是不同的。定义只能出现一次,而声明可以出现多次。
下面的语句是定义,不能放在头文件中:
extern  int ival=10; //虽然ival声明为extern,但是它初始化了,代表这是个定义。
double fica_rate;  //fica_rate虽然没有初始化,但是没有extern。所以仍是定义。

3.在多个C文件的程序中,想在头文件中声明定义几个变量,如果给声明的变量赋值,则提示重复定义,在声明的变量前加extern只对变量进行声明,可是在什么地方给变量赋值呢??
答:加了extern后,就可以在其他任何引用此文件的地方来进行赋值的。比如说,可在主文件中进行赋值。

4.  extern int x; //变量是声明,并未实际分配地址。
    void print(); //函数声明,并未产生实际目标代码
    如:int x; int x=3; void print() { }; //均为定义。

5。只有全局变量并且没有被static声明的变量才能声明为extern。所以,如果你不想自己源文件中全局变量被其他文件引用,你就可以给变量加上static声明。
    定义也是声明。C++中有个关键字用来声明变量的,即extern。它声明一个变量,而不定义它。
    注意:在C++中,变量有且只能有一次定义,但是可以声明多次。

是一个修饰符
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。

c文件中用extern unsigned long _lror_ (unsigned long, unsigned char) 来申明这个函数。 这样做其实跟包含头文件等效,如将unsigned long _lror_ (unsigned long, unsigned char)这个函数在A.h文件中申明了后,


printf中的%c,%d,%u...都分别代表输出的是什么类型的?
o:八进制整数 e.g. 0123 x(%X):十六进制整数0f(0F) e.g. 0x1234 p:指针 s:字符串 :"%"扩展语句:C语言中printf语句的简介:printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。函数原型:int ...

C语言中头文件的一般格式是#ifndef、#define #endif其中这#define宏定 ...
比如说 你要求圆的面积 d=π*r*r。我们就会定义 define π 3.1415926。这样做的好处是当源文件中有很多地方用到了π。编译器会自动将π替换成3.1415926。而且如果我想再次修改π的值时,只需要改宏定义的值就可以了,对于修改程序会方便很多。ifndef xxxxx define xxxxx endif 这样在类的头文件中...

c语言中的头文件引入的关键字是
c语言中的头文件引入的关键字是include。在include的地方,把头文件里的内容原封不动的复制到引用该头文件的地方,头文件里包括宏定义,全局变量,函数原型声明。

C语言头文件的作用
C语言头文件作用:1、加强类型检查,提高代码得类型安全性;2、减少代码的重复书写,提高编写和修改程序的效率;3、提供全局变量、全局函数的声明或提供公用数据类型的定义,从而实现分离变异或代码复用;4、提供保密和代码重用的手段,用户只需要按照头文件的接口声明来调用库功能,编译器会从库中提取相应的...

C语言中定义头文件是<>还是“”
在C语言中<> 和“”都可以定义头文件。如果用的是<>那么程序首先会 在默认路径中去找要调用的文件,如果没有找到然后就在当前目录里面 找。如果用的是“”那么程序只会在当前目录下寻找要调用的文件。如果你是将 编程工具 和 调用的文件 放在一个文件目录中的话,那么用“”就不会有任何问题!

C语言中的头文件有多少种都有哪些?C函数库有哪些?
常见的函数有malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等。具体内容可以在编译器的包含目录stdlib.h头文件中打开查看。为了方便用户编写程序,C语言为用户开发了大量的库函数,定义在。H文件,用户可以调用这些函数来实现强大的功能...

C语言中,头文件的包括,有先后顺序之分吗???望详细说明哦!!!_百度知...
一般来说没有!编译器在编译程序时,会将头文件按引用的顺序依次读入到中间源代码文件中,然后进行编译。如果出现 在定义变量和函数时,存在相互调用的问题,而头文件又分成多个(各写各的头文件),这样一来顺序错了就会产生编译问题。 如:\/ 1.h datatype abc ; \/\/这里引用了一个新类型data...

在C语言的头文件中中括号和双引号的在用的时候的区别??
在C语言的头文件中中括号和双引号的在用的时候的区别为:编译不同、对象不同、环境不同。一、编译不同 1、头文件中中括号:头文件中中括号编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索。2、头文件中双引号:头文件中双引号编译时会先在源代码所在目录搜索,如果找不到...

C语言中的头文件,源文件到底是什么东西?
1、cpp文件和.h文件有各自的分工,一般来说,h文件中是类的定义和类成员函数的声明,以及全局变量定义等;cpp文件是对应h文件中成员函数的代码实现。一般cpp文件代码较多。2、 一般我们在编译的时候只编译cpp文件,将该cpp包含的h文件设为依赖。从而将这些cpp文件和h文件联系起来 C语言 C语言是一门...

C语言的头文件有哪些?
<string.h> 定义了一个变量类型、一个宏和各种操作字符数组的函数 <assert.h> 提供了一个名为 assert 的宏,它可用于验证程序做出的假设 <limits.h> 决定了各种变量类型的各种属性 <stddef.h> 定义了各种变量类型和宏。这些定义中的大部分也出现在其它头文件中 定义了四个变量类...

紫金县14739859135: c中库函数中的头文件为什么在声明函数的时候前面都加"extern"? -
叶岭圣能: C函数前加extern表示该函数已经在其他文件中定义.extern是C,C++中的一个关键字.extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义.另外,extern也可用来进行链接指定.

紫金县14739859135: 在C语言中,extern的作用是什么? -
叶岭圣能: 在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数: [extern] 函数类型 函数名(函数参数表) {……} 调用外部函数时,需要对其进行说明: [extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……];[案例]外部函数应用. (1)文件mainf.c main() { extern void input(…),process(…),output(…); input(…); process(…); output(…); }

紫金县14739859135: C语言中extern的用法 -
叶岭圣能: extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern也可用来进行链接指定.extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个...

紫金县14739859135: 计算机c语言中 存储类别为extern型 什么意思 -
叶岭圣能: extern型是外部变量、简单说就是其他c文件中的变量,你拿过来用要声明.你也可以定义,供别的文件使用.我们平时编的简单的程序只需要1个c文件,但是如果很复杂的程序可能需要十几个文件.比如说1个项目分给很多人,每个人完成各自的模块,要调用别人c文件中的变量,这时就用到了extern.

紫金县14739859135: C语言 extern -
叶岭圣能: 在头文件中声明函数时,前面的extern可有可无,只要这些函数曾在某个.c文件中实现就行了,不过一些函数没有在所包含的头文件中给出声明,同时函数的定义位于其它文件中,这时候使用该函数的.c文件必须用extern标记该函数为外部函数....

紫金县14739859135: 看很多单片机的头文件里写着 extern "c",这是什么意思?另外,51单片机可不可以用C++编写程序? -
叶岭圣能: 我们的C语言有个进化版,叫C++,这个想必楼主知道,Keil MDK是支持C++编程的,也就是说,你可以用C语言或者C++写你的程序,都可以.但是,有一个问题,就是头文件的问题,C语言写的头文件C++是不认识的,需要转换一下,这个转...

紫金县14739859135: 计算机C语言中的关键字:extern是什么意思? -
叶岭圣能: extern用来声明外部变量.

紫金县14739859135: 菜鸟:c语言中的extern -
叶岭圣能: C C++都是以单一的源文件为一个独立的编译单元的,exten的声明使得当前的编译单元可以访问其他编译单元定义的变量,但是C C++的语法要求当前的编译单元必须预先声明.名字查找是在命令空间中进行的,这个流程不是局限在某个编译单...

紫金县14739859135: C语言中 extern 的用法,最好有示例,概念少说点 -
叶岭圣能: extern我用了几次,主要是声明外部变量的作用,我用的也是在头文件中.比如说,你有一个project.c,lib.c,lib.h,三个文件,在lib.h里面有lib.c的变量定义,比如a[4]数...

紫金县14739859135: static和extern的区别 -
叶岭圣能: 这个一楼的回答差了一些哦.有几种情况:首先,extern和static完全不同,extern不能定义一个变量,extern表示的是“已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找.”static会定义一个变量,但是分成多种情况...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网