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

时间:2015-12-03 22:22:58

标签: c++

在标题中声明变量 在源代码中声明变量 之间是否有任何区别?例如性能证券

2 个答案:

答案 0 :(得分:0)

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

  • 多个模块可能包含用于共享数据结构的标头
  • 并分享函数声明。
  • 标题经常被写入,因此它不会多次声明其内容。

    #ifndef __THIS_HEADER_H
     #define __THIS_HEADER_H  1
     ....  (content of header which is protected from multiple insertions)
    #endif
    

模块可能包含.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 1\n");
 }
 #endif

 #if PERSONALITY == 2
 int main (void)
 {
    printf ("personality 2\n");
 }
 #endif

答案 1 :(得分:-2)

在标头中声明变量使其可用于使用#include<...>包含此标头的所有文件。在cpp文件中声明它只使它们可用于此文件中的代码。

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

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

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

(也适用于未来的读者)请注意,仅使用 h 文件以避免看似复杂的情况是非常糟糕的做法,因为您不会使用一个非常好的语言特性,它可以使它(除了使用类)不可能将私有函数和变量分开。

另外,另一个注意事项: h 文件是分发的,而他们的代码(在 cpp 文件中)被编译成二进制文件。所以为了不将代码发送给每个人并保持头文件较小,你应该适当地拆分它。