因此,假设我有以下 C++ 标头testheader.h
:
struct mystruct
{
struct myinnerstruct
{
int x;
} astruct;
};
struct myinnerstruct
{
int x;
};
以及以下 C++ 源代码test.cpp
:
#include "testheader.h"
using namespace std;
int main()
{
return 0;
}
g++ 在编译/链接期间没有给出任何问题。
现在,如果我有相同的头文件,但不是 C++ 源代码,而是一个 C 源文件test.c
:
#include "testheader.h"
int main()
{
return 0;
}
我用 gcc 编译,我得到以下错误:
error: redefinition of struct myinnerstruct
那么,我认为 C 版本的范围是翻译单元,而 C++ 版本是块范围?有人可以确认是这种情况吗,也许给我一个为什么它有意义的理由?我正在混合 C 和 C++ 代码,这给我带来了很多麻烦。
非常感谢任何见解。谢谢!