2015-12-03 35 views

回答

0

没有区别可言除非它们被以这样的方式写得最好的,它支持:。

  • 多个模块可以包含头共享数据结构
  • 并共享函数声明。
  • 通常会写一个标题,以便它不会多次声明其内容。

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

模块可包括一个.c文件,但这是罕见的(和非推荐)的用法:

一个。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 
-2

变量声明在标题并使它们可用于包括使用#include<...>这头的所有文件。在cpp文件中声明它只会使这些文件中的代码可用。

这是因为方式cpph文件一起工作。

  • ħ文件始终包括CPP文件。这里不需要包含声明。
  • 其他文件包括^h文件会得到什么在^h文件,而不是CPP文件,因此变量声明有超出范围。

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

(也为未来的读者)注意只使用^h文件,以避免一个看似复杂的形势非常不好的做法,因为你那么不使用很好的语言功能,它将使它(除了使用类)不可能将私人与公共职能和变量分开。

此外,在另注:^h文件分布,而他们的代码(这是在CPP文件编译成二进制所以不陶醉你的代码给大家,并保持头的缘故。文件小,你应该适当拆分此

+3

“h文件总是包含cpp文件“? – Kevin

+0

'#include <...>'只能用于标准标题。 '#include“...”'应该用于用户编写的头文件。 –

+0

@ M.M是一个指南吗?我不遵循它。唯一的区别是'#include“...”'在搜索常规包含路径之前在文件的目录中搜索标题。 – Kevin

相关问题