在头中声明变量而不是在源文件(cpp/h)中声明变量有什么区别
What is the difference between declaring a variable in a header instead of the source file (cpp/h)
在头中声明变量和在源代码中声明变量有什么区别吗?例如性能,证券
没有任何区别。除非它们最好是以支持的方式编写的:
- 多个模块可以包括报头以共享数据结构
- 并共享函数声明
-
通常会编写一个标头,这样它就不会多次声明其内容。
#ifndef __THIS_HEADER_H #define __THIS_HEADER_H 1 .... (content of header which is protected from multiple insertions) #endif
模块可能包括.c
文件,但这是罕见的(不推荐)用法:
a.c:
#define PERSONALITY 1
#include "main_logic.c"
b.c:
#define PERSONALITY 2
#include "main_logic.c"
main_logic.c:
#if PERSONALITY == 1
int main (void)
{
printf ("personality 1n");
}
#endif
#if PERSONALITY == 2
int main (void)
{
printf ("personality 2n");
}
#endif
在标头中声明变量使其可用于使用#include<...>
包含此标头的所有文件。在cpp文件中声明它使它们只能用于该文件中的代码。
这是因为cpp和h文件协同工作的方式。
- h文件始终包括cpp。此处不需要包含声明
- 其他文件,包括h文件,将获得h中的内容,而不是cpp,因此声明的变量超出了范围
h文件包含所有声明,而相应的cpp应包含这些声明的代码。
请(也适用于未来的读者)注意,为了避免出现看似复杂的情况,只使用h文件是非常糟糕的做法,因为这样你就不会使用非常好的语言功能,而且(除了使用类)无法将私有函数和公共变量分开。
另外,请注意:h文件是分布式的,而它们的代码(位于cpp中)被编译成二进制文件。因此,为了不让所有人都看到你的代码并保持头文件的小,你应该适当地拆分它。
相关文章:
- 在疯狂的部分中声明变量
- 如何在C++中为高分辨率时钟声明变量?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- CUDA 的性能取决于声明变量
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- C++声明变量时自动类型推断而不初始化
- 在不同循环中多次声明变量的优点
- 奇怪的错误 C2131 与 constexpr 声明变量
- 是否可以在 "if" 语句中声明变量?
- 在python-ctypes中声明变量并传递给dll函数
- 在递归函数C++中声明变量
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 奇怪的未声明变量编译器错误
- 我在C++程序中声明变量时遇到问题
- 在命名空间中声明变量
- C++ lambda 按值捕获,而无需更早声明变量
- 声明变量以保存字符串列表时的内存分配
- 如何声明C 变量应突变
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- 在同一命名空间中声明变量和函数是否出错?[C++]