讨论/《C++ 面试突击》 - 全局变量定义在头文件中有什么问题?/
《C++ 面试突击》 - 全局变量定义在头文件中有什么问题?
共 9 个回复

#ifndef只防止某.c重复include同一头文件
不同.c去include同一头文件是可以的;如果这个头文件里定义了全局变量,每个include该头文件的.c都会生成各自的同名全局变量,导致重复定义

6

C++不在头文件中定义全局变量,可以声明吧,加extern,然后在对应cpp中定义,就可以别的cpp中使用了

2

解决这个问题有三种方法,leetcode没有给出方案,这里有:https://www.learncpp.com/cpp-tutorial/global-constants-and-inline-variables/

1

编译器对每个源文件进行编译,最后进行链接,多个源文件包含了定义全局变量的头文件的话,在链接时就重复了

1

被多个.c文件 include,不是多次include头文件

1

请问一下: 一般写头文件不是都会写 #ifndef 来避免重复include头文件内容吗? 如果头文件被多次include, 全局变量会重复定义的话, 其他自定义的struct结构不是也会重复定义吗?

1

所以只在头文件里声明就行了。

是的,所以在头文件中定义全局变量即使用#ifndef 也无法阻止重复定义

被多个.c文件include不就是被多次incllude吗? 一个.c文件include是一次, 多个不就是多次吗?