したがって、次の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++のコードを混ぜ合わせていますが、これはかなりの問題を引き起こしています。
どんな洞察も大歓迎です。ありがとう!