在c中包含嵌套标头文件的正确方法是什么?



我有以下标头和源文件。

clnt_thread.h        included in clnt_thread.cpp and main.c
jacc_sim.h           included in jacc_sim.cpp and main.c
srvr_info.h          included in srvr_info.cpp and main.c
constants.h          included in clnt_thread.h and in srvr_info.h, both see above
                          and in global_variables.c
global_variables.h   included in main.c
main.c

一些变量在clnt_thread.h中被声明为extern,而jacc_sim.h中的其他变量。

我的问题是,当我将全局变量定义为某些标题文件中的extern时,我会遇到错误,说它们要么是未定义的,要么是多次定义的。另外,某些全局变量将在线程之间共享,而每个线程将独立使用。

我知道这些错误是源文件中标头文件嵌套(包括)的结果。

so:

  1. 包含这些标头文件并定义extern变量的正确方法是什么?

  2. 是什么区分线程之间共享的变量,另一个不应在线程之间共享的变量?

确实遵循以下规则:

  1. 请勿在标题中定义变量,而只能声明它们。IE。始终将extern与变量一起使用。
  2. 在一个代码文件中恰好在一个代码文件中定义每个变量(声明 extern by 1),即没有 extern
  3. 甚至在一个标题中只能宣布变量一次。(尽管如果您始终执行编译器,则不会抱怨,但只能进行一次更干净,更安全。)
  4. 功能原型进入标题一次;即用 ;末端。
  5. 函数定义一次进入代码文件,一次;即具有功能头(无;的原型),然后是功能主体({...})。
  6. 无论您想访问或参考,都包括将其声明为文件中的标题(您需要它需要的标题或代码文件)。
  7. 使用额外的后卫以进行额外的安全(主要用于宏等)。

重新包含后卫的示例:

myheader.h:

#ifndef MYHEADER_H
#define MYHEADER_H
/* only declarations */
#endif /* MYHEADER_H */

相关内容

  • 没有找到相关文章

最新更新