1 / 5
文档名称:

extern使用方法.pdf

格式:pdf   大小:294KB   页数:5页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

extern使用方法.pdf

上传人:陈潇睡不醒 2021/3/26 文件大小:294 KB

下载得到文件列表

extern使用方法.pdf

文档介绍

文档介绍:1、引用性声明、定义性声明
    强符号、弱符号
    出现在linux的gcc链接分析中,可以加深链接的理解。
    全局变量或函数本质上讲没有区别,函数名是指向函数二进制块开头处的指针。而全局变量是在函数外部声
明的       变量。函数名也在函数外,因此函数也是全局的。
2、头文件
    首先说下头文件,其实头文件对计算机而言没什么作用,她只是在预编译时在#include的地方展开一下,没
别的意义了,其实头文件主要是给别人看的。
    我做过一个实验,,然后在引用该头文件的地方用
    #include""
    编译,链接都很顺利的过去了,由此可知,头文件仅仅为阅读代码作用,没其他的作用了!
    不管是C还是C++,你把你的函数,变量或者结构体,。然后编译成
lib,dll,obj,.o等等,然后别人用的时候最基本的gcc  |obj|dll|lib 等等。
    但对于我们程序员而言,他们怎么知道你的lib,dll...里面到底有什么东西?要看你的头文件。你的头文件就
是对用户的说明。函数,参数,各种各样的接口的说明。
    那既然是说明,那么头文件里面放的自然就是关于函数,变量,类的“声明”了。记着,是“声明”,不是“定
义”。那么,我假设大家知道声明和定义的区别。所以,最好不要傻嘻嘻的在头文件里定义什么东西。比如全局变
量:
       #ifndef 
    #define 
    int A;
    #endif
那么,很糟糕的是,这里的int A是个全局变量的定义,所以如果这个头文件被多次引用的话,你的A会被重复定
义。显然语法上错了。只不过有了这个#ifndef的条件编译,所以能保证你的头文件只被引用一次,不过也许还
是会岔子,但若多个c文件包含这个头文件时还是会出错的,因为宏名有效范围仅限于本c源文件,所以在这多个
c文件编译时是不会出错的,但在链接时就会报错,说你多处定义了同一个变量。
Linking...
 : error LNK2005: "int glb" (?glb@***@3HA) already defined in 
Debug/ : fatal error LNK1169: one or more multiply defined symbols found
注意!!!
extern
这个关键字真的比较可恶,在声明的时候,这个extern居然可以被省略,所以会让你搞不清楚到底是声明还是定
义,下面分变量和函数两类来说:
(1)变量
    尤其是对于变量来说。
extern int a;//声明一个全局变量a
int a; //定义一个全局变量a
extern int a =0 ;//定义一个全局变量a 并给初值。
int a =0;//定义一个全局变量a,并给初值,
第四个 等于 第 三个,都是定义一个