在我的项目中,我们有一个头文件,看起来类似于这样:
我了解extern "C"会声明my_struct全局变量为C语言链接,但这是否意味着如果我在C编译文件和CPP编译文件中都包含此文件,链接器会确定我的意图,在最终链接的可执行文件中,我只想让C和CPP文件共用一个MyStruct?
编辑:
我已经采纳了被接受的答案的建议。在头文件中,我有:
typedef struct MyStruct
{
int x;
} MyStruct;
extern "C" MyStruct my_struct;
以前, 它只包含在 C++ 源文件中。现在,我需要将它包含在 C 文件中。所以,我做了以下操作:
typedef struct MyStruct
{
int x;
} MyStruct;
#ifdef __cplusplus
extern "C" MyStruct my_struct;
#else
MyStruct my_struct;
#endif
我了解extern "C"会声明my_struct全局变量为C语言链接,但这是否意味着如果我在C编译文件和CPP编译文件中都包含此文件,链接器会确定我的意图,在最终链接的可执行文件中,我只想让C和CPP文件共用一个MyStruct?
编辑:
我已经采纳了被接受的答案的建议。在头文件中,我有:
typedef struct MyStruct
{
int x;
} MyStruct;
#ifdef __cplusplus
extern "C" MyStruct my_struct;
#else
extern MyStruct my_struct;
#endif
在cpp源文件中,我有如下内容:
extern "C" {MyStruct my_struct;}
而且一切都在构建中。
extern
,放在头文件中;它不会导致分配 - 它承诺将在其他地方进行分配。另一方面,定义没有extern
,并且放置在其中一个CPP文件中。它是控制分配的定义:需要在CPP文件中发生分配。 - Sergey Kalinichenko