重定义
// #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的作用阈是当前文件,每个文件有一个副本