多文件 定义全局变量的使用 extern

extern 申明变量在其他文件中定义了。如果变量放在*.h头文件,其它cpp文件加载*.h头文件就会出现变量定义重复。

头文件 DHeah.h

#include <iostream>
using namespace std;

void add();
void mul();

文件 Dine.cpp

int num = 3;

文件 A.cpp

extern int num;

void add(){
    num += num;
}

文件B.cpp

extern int num;

void mul(){
    num *= num;
}

文件Main.cpp

#include "DHead.h"

extern int num;

int main(){
    cout << num << endl;
    add();
    cout << num << endl;
    mul();
    cout << num << endl;
    return 0;
}

运行程序显示

时间: 2024-10-13 18:46:30

多文件 定义全局变量的使用 extern的相关文章

c语言头文件中定义全局变量的问题

问题是这么开始的: 最近在看一个PHP的扩展源码,编译的时候的遇到一个问题: ld: 1 duplicate symbol for architecture x86_64 仔细看了一下源码,发现在头文件中 出现了全局变量的定义. 简化一下后,可以这么理解: // t1.h #ifndef T1_H #define T1_H int a = 0; #endif //------------------ //t1.c #include "t1.h" #include "t2.h&

C语言之在头文件中定义全局变量

通常情况下,都是在C文件中定义全局变量,在头文件中声明,但是,如果我们定义的全局变量需要被很多的C文件使用的话,那么将全局变量定义在头文件里面会方便很多,那到底是如何实现的? os_var.c文件内容 1 #define OS_GLOBALS 2 #include “os.h” os.h文件内容 1 #ifdef OS_GLOBALS 2 #define OS_EXT 3 #else 4 #define OS_EXT extern 5 #endif os.h中定义很多的全局变量,但是os.h又需

能不能在头文件中定义全局变量?(转)

地址:https://blog.csdn.net/baidu_35679960/article/details/79200865 1.ANSI C标准是什么?GNU又是什么?ld是什么? ANSI C是C语言的标准规范,是国际标准化组织制定的国际标准. 虽然 ANSI C规范了C语言的实现,但是在实际情况中,各家C语言提供商都会根据平台的不同情况对ANSI C进行一定的扩展.因此可以将现实中C语言实现看作是ANSI C的一个超集.比较有代表性的例子是linux的gcc编译器.由于该编译器对ANS

C语言中定义全局变量

(1)在C语言的头文件中定义变量出现的问题 最好不要傻嘻嘻的在头文件里定义什么东西.比如全局变量: /*xx头文件*/ #ifndef  _XX_头文件.H #define  _XX_头文件.H int A; #endif 那么,很糟糕的是,这里的int A是个全局变量的定义,所以如果这个头文件被多次引用的话,你的A会被重复定义,显然语法上错了.只不过有了这个#ifndef的条件编译,所以能保证你的头文件只被引用一次,不过也许还是不会出岔子,但若多个c文件包含这个头文件时还是会出错的,因为宏名有

C++定义全局变量/常量几种方法的区别

在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块):    在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌入式下做开发工作的话,那么你可能非常的理解编译与连接的区别!当在VC这样的开发工具上编写完代码,点击编译按钮准备生成exe文件时,VC其实做了两

c++多文件使用全局变量的方法

开始错误的做法 在global.h声明并定义变量 int sharedData = 9; 编译出错 Building target: CTest Invoking: GCC C++ Linker g++ -o "CTest" ./src/CTest.o ./src/global.o ./src/global.o:(.data+0x0): `sharedData'被多次定义 ./src/CTest.o:(.data+0x0):第一次在此定义 collect2: 错误: ld 返回 1 正

C/C++定义全局变量/常量几种方法的区别

在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块):    在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌 入式下做开发工作的话,那么你可能非常的理解编译与连接的区别!当在VC这样的开发工具上编写完代码,点击编译按钮准备生成exe文件时,VC其实做了

七:定义全局变量的方法以及UIKIT_EXTERN简单理解

一.定义全局变量: 创建类文件 在.h中: 1 #import <UIKit/UIKit.h> 2 3 UIKIT_EXTERN CGFloat const ZWTitlesViewH; 4 UIKIT_EXTERN CGFloat const ZWTitlesViewY; 在.m中: 1 #import <UIKit/UIKit.h> 2 CGFloat const ZWTitlesViewH = 35; 3 CGFloat const ZWTitlesViewY = 64; 再

Yii Framework2.0开发教程(4)在yii中定义全局变量

在yii中定义全局变量最好的地方是入口脚本处.也就是web文件夹中的index.php文件 例如我们在defined('YII_ENV') or define('YII_ENV', 'dev');后写上 defined('ZYL_HEHE') or define('ZYL_HEHE','zhyoulun-hehe'); 并在我们教程(1)中建立的views/zhyoulun/helloworld.php文件中写上 <?php echo 'hello world!'; //全局变量 echo co