0

我不记得这里的规则是什么,在我的应用程序项目中,我目前在 stdafx.h/cpp 中声明了一个全局变量:

extern const char *LOGFILE = "test.log"

我发现库需要知道这个变量的值。我可以在库中转发声明它,因为它在构建应用程序之前没有链接,而不会出现关于多重定义符号的错误?

4

1 回答 1

4

规则是:一个extern变量可以在你需要的任意多个编译单元中声明(no =...)(在任何一个编译单元中甚至不止一次)。它应在整个程序中仅定义一次(用)。=...

因此,如果您想编写一个使用此变量的库,您可以安全地在需要它的库的任何编译单元中声明它:您将能够编译库对象并生成库本身而不会出错。库中将有一个未解析的符号,如果它是共享库,则在加载时构建可执行文件时将在链接时解析。

您可以在所有来源中写入extern const char *LOGFILE;(NO= ...部分),或者放入 .h 并包含它。

于 2015-08-05T15:39:13.423 回答