我有以下标头和源文件。
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
某些变量在extern
中声明为clnt_thread.h
,在jacc_sim.h
中声明为其他变量。
我的问题是,当我在一些头文件中将全局变量定义为extern
时,我得到的错误是它们未定义或者它们被多次定义。另外,一些全局变量将在线程之间共享,而一些全局变量将由每个线程独立使用。
我知道这些错误是源文件嵌套(包含)头文件的方式的结果。
所以:
包含这些头文件和定义extern
变量的正确方法是什么?
区分线程之间共享的变量和不应该在线程之间共享的另一个变量?
答案 0 :(得分:1)
请遵守以下规则:
extern
变量。extern
一次,即没有extern
。;
。;
的原型),然后是函数体({...}
)。重新加入警卫的例子:
MyHeader.h:
#ifndef MYHEADER_H
#define MYHEADER_H
/* declararions and definitions */
#endif /* MYHEADER_H */