重定义

// #program once 无法保护全局变量的定义,即全局变量定义在头文件中会重定义,即使有program once。

#program once 是用来保护嵌套包含的,不是用来保护两个cpp包含同一个h,即class可以被两个cpp无隔离宏包含,对于两个不同的cpp隔离宏不起作用。两个文件作用域!所以会链接时会产生重定义

但是声明是可以重复声明的

extern int a; // 这是声明

#include 是将头文件中的声明合并到源文件中,一起编译。#program once 不会重复编译。但是全局变量的定义不会保护。

两个.cpp中不能同时在全局区,定义同一个名字的变量。

int num;

num = 6;

// 会有错误。在全局区会找不到num的类型,还有会重定义。

c++头文件的使用和多个文件中如何共用一个全局变量_头文件定义的变量在源文件可以用吗-CSDN博客

#pragma once的作用以及全局变量的问题-CSDN博客

static 不会重复定义时因为static的作用阈是当前文件,每个文件有一个副本

Table of Contents