【发布时间】:2017-09-27 04:06:07
【问题描述】:
我有以下头文件和源文件。
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 时,我收到错误消息,提示它们未定义或已定义多次。另外,一些全局变量将在线程之间共享,而一些全局变量将由每个线程独立使用。
我知道这些错误是由于头文件嵌套(包含)在源文件中的方式造成的。
所以:
包含这些头文件并定义
extern变量的正确方法是什么?如何区分线程间共享的变量和不应在线程间共享的变量?
【问题讨论】:
-
您还没有展示您认为它们是如何在标题中声明/定义的。我们应该如何猜测你在做什么?您是否在标题中使用了关键字
extern?如果不是,那是您问题的主要部分。请注意,标头是编译时问题;多线程是一个运行时问题。它们本质上是无关的。 -
因为“他们……不相关。”
-
如果您遇到多个定义错误,这可能意味着您忘记使用
extern,并且您可能没有保护您的头文件不被多次包含。 -
您似乎面临的问题与程序是多线程还是单线程无关。
-
@alk:OP 可能对如何声明或定义线程特定变量感到困惑,但帖子中没有提到这一点。
标签: c multithreading include global-variables