开发者

C++声明extern变量和extern函数的用法

目录
  •  一、 声明extern变量
    • 1、 如何声明
    • 2、在何处声明
    • 3、在何处初始化
    • 4、在何处调用
    • 5、举例声明extern变量
      • (1)、声明extern变量的test.h文件
      • (2)、初始化extern变量的test.cpp文件
      • (3)、调用extern变量的main.cpp文件
  • 二、声明extern函数
    • 1、 如何声明
      • 2、在何处声明
        • 3、在何处定义
          • 4、在何处调用
            • 5、举例声明extern变量
              • (1)、声明extern函数的test.h文件
              • (2)、定义extern函数的test.cpp文件
              • (3)、调用extern函数的main.cpp文件
          • 三、总结

             一、 声明extern变量

            1、 如何声明

            在正常的变量声明前增加extern关键字。

            2、在何处声明

            在头文件中声明extern变量。比如:test.h。在变量声明的时候不要赋值。

            3、在何处初始化

            在与头文件名称相同的.cpp文件中定义,比如:test.cpp,test.cpp中必须引用test.h;

            4、在何处调用

            在主文件中调用,比如:main.cpp,主文件可以不与test.h同名,但必须必须引用test.h。

            主文件一定不要引用test.cpp,否则出现警告:LNK2005、LNK1169;

            5、举例声明extern变量

            (1)、声明extern变量的test.h文件

            /*extern*/
            //声明外部变量
            extern int a;
            extern int b;

            (2)、初始化extern变量的test.cpp文件

            /*extern*/
            #include "test.h"
             
            //定义外部变量、外部变量初始化
            int a = 520;
            int b = 1314;

            (3)、调用extern变量的main.cpp文件

            /*extern*/
            //使用外部变量
            #include <stdio.h>
            #include "test.h"
            /*#include"test.cpp"*/	//不可以这样引用,否则警告LNK2005、LNK1169
             
            int main(void)
            {
            	printf("a = %d , b = %d\n", a, b);
             
            	return 0;
            }
            /*运行结果
            a = 520 , b = 1314	*/

            二、声明extern函数

            1、 如何声明

            在正常的函数声明前增加extern关键字。

            2、在何处声明

            在头文件中声明extern函数。比如:test.h,声明extern函数不要书写函数体的实现方法。

            3、在何处定义

            在与头文件名称相同的.cpp文件中定义和实现函数体,比如:test.cpp,test.cpp中必须引用test.h;

            4、在何处调用

            在主文件中调用,比如:main.cpp,主文件可编程客栈以不与test.h同名,但必须必须引用test.h。

            主文件一定不要引用test.cpp,否则出现警告:LNK2005、LNK1169;比如:

            已启动生成...
            1>------ 已启动生成: 项目: Project1, 配置: Debug x64 ------
            1>main.cpp
            1>LINK : 没有找到 C:\Users\pc\Desktop\extern\Project1\x64\Debug\Project1.exe 或上一个增量链接没有生成它;正在执行完全链接
            1>test.obj : error LNK2005: "int __cdecl add(int,int)" (?add@@YAHHH@Z) 已经在 main.obj 中定义
            1>test.obj : error LNK2005: "int a" (?a@@3HA) 已经在 main.obj 中定义
            1>test.obj : error LNK2005: "int b" (?b@@3HA) 已经在 main.obj 中定义
            1>C:\Users\pc\Desktop\extern\Project1\x64\Debug\Project1.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
            1>已完成生成项目“Project1.vcxproj”的操作 - 失败。

            5、举例声明extern变量

            (1)、声明extern函数的test.h文件

            /*extern*/
            //声明外部变量
            extern int a;
            extern int b;
            //声明外部函数
            extern int add(int a, 编程客栈int b);	//extern关键字可要可不要

            (2)、定义extern函数的test.cpp文件

            /*extern*/
            #include "test.h"
             
            //定义外部变量、外部变量初始化
            int a = 520;
            int b = 1314;
             
            //定义外部函数。实现外部函数的方法
            int add(int a, int b)
            {
            	return a + b;
            };

            (3)、调用externjavascript函数的main.cpp文件

            /*extern*/
            //使用外部变量
            #include <stdio.h>
            #include "test.h"
            /*#include"test.cpp"*/	//不可以这样引用,否则警告LNK2005、LNK1169
             
            int main(void)
            {
            	iABHSxyvWprintf("a = %d , b = %d\n", a, b);		//调用外部变量
            	printf("add(a, b) = %d\n", add(a, b));	//调用外部函数
            	return 0;
            }
            /*运行结果
            a = 520 , b = 1314
            add(a, b) = 1834	*/

            三、总结

            • 要养成正规的编程习惯,变量、函数、结构体、类的声明要放在.h文件中,比如test.h;结构体和类体的实现可以放在test.h文件中,但不要初始化。声明外部变javascript量、声明外部函数,等时必须使用extern关键字。
            • 把变量的初始化、函数方法的实现、结构体的实现、类体的实现放在另一个.cpp文件中,这个.cpp文件默认的要与.h文件同名,比如test.cpp。同时在test.cpp要引用test.h文件。声明外部变量、声明外部函数时必须使用extern关键字。初始化外部变量、定义外部函数,等的实现方法时不要重复使用extern关键字。
            • main.cpp负责变量的引用、函数的调用、结构体变量定义和结构体成员的调用,类对象的定义和类成员的调用;调用外部变量、外部函数时不需要使用extern关键字。main.cpp要引用test.h文件,一定不要引用test.cpp文件。

            以上就是C++声明extern变量和extern函数的用法的详细内容,更多关于C++声明extern变量和函数的资料请关注编程客栈(www.devze.com)其它相关文章!

            0

            上一篇:

            下一篇:

            精彩评论

            暂无评论...
            验证码 换一张
            取 消

            最新开发

            开发排行榜