extern

参考:extern声明变量详解

变量的声明:

int data;         // 这样既声明了data同时也定义了data
extern int data; // 只声明而不定义

函数的声明:

void hello();           // 函数的声明
extern void hello();    // 也是函数的声明,和void hello(); 一模一样。 参考:https://blog.csdn.net/weixin_38145317/article/details/86496041
                        // extern void hello(); 仅仅是暗示这个函数可能在别的源文件里定义。
                        // 如果在函数定义的地方带有关键字extern,表示该函数会提供给外部文件使用,
                        // 其实有些编译器是默认每个函数都是extern类型的,反之是static类型。参考:https://developer.aliyun.com/article/638079

extern声明全局变量:

  • 头文件中不允许定义全局变量,因为当头文件中定义了全局变量A,则每一个包含了头文件的源文件中会定义一次全局变量A,使得整个代码空间中多次定义了此全局变量A,编译时会出现重定义的错误。
  • 一般会在头文件中使用extern对全局变量进行声明,这样其他包含此头文件的源文件就可以使用此全局变量。头文件中只进行了声明,所以必须有且仅有一个源文件中对全局变量进行定义。

extern “c”:让此c++代码按照c语言的方式编译。

使用变量之前必须声明,声明可以有多次,而定义只能有一次。

类的声明和定义

参考:关于C++的变量和类的声明和定义

定义一个类时,对于其中的数据成员,不论有无默认值,也不论是static还是非static的,我们只是描述了一个类,注意,仅仅是描述了类,也即,我们只知道它含有哪些类型,如果还定义了函数成员,我们还描述了这种类型的操作。所以类中的成员变量都只是被声明了,并未被定义。

当类中包含static修饰的成员变量,那么就必须在源文件中对static变量进行定义,如下:

// test.h 
#pragma once

class A{
public:
    static int a; // 声明static成员变量
  ...
};


// test.cpp
#include"test.h" 

int A::a; // 定义static成员变量

int main(){
      
    return 0;
}

原文地址:http://www.cnblogs.com/codingbigdog/p/16791551.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性