在头中声明变量而不是在源文件(cpp/h)中声明变量有什么区别

What is the difference between declaring a variable in a header instead of the source file (cpp/h)

本文关键字:声明 变量 区别 什么 源文件 cpp      更新时间:2023-10-16

在头中声明变量和在源代码中声明变量有什么区别吗?例如性能证券

没有任何区别。除非它们最好是以支持的方式编写的:

  • 多个模块可以包括报头以共享数据结构
  • 并共享函数声明
  • 通常会编写一个标头,这样它就不会多次声明其内容。

    #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文件中声明它使它们只能用于该文件中的代码。

这是因为cpph文件协同工作的方式。

  • h文件始终包括cpp。此处不需要包含声明
  • 其他文件,包括h文件,将获得h中的内容,而不是cpp,因此声明的变量超出了范围

h文件包含所有声明,而相应的cpp应包含这些声明的代码。

(也适用于未来的读者)注意,为了避免出现看似复杂的情况,只使用h文件是非常糟糕的做法,因为这样你就不会使用非常好的语言功能,而且(除了使用类)无法将私有函数和公共变量分开。

另外,请注意:h文件是分布式的,而它们的代码(位于cpp中)被编译成二进制文件。因此,为了不让所有人都看到你的代码并保持头文件的小,你应该适当地拆分它。