Итак, скажем, у меня есть следующий заголовок С++, testheader.h
:
struct mystruct
{
struct myinnerstruct
{
int x;
} astruct;
};
struct myinnerstruct
{
int x;
};
и следующий источник С++, test.cpp
:
#include "testheader.h"
using namespace std;
int main()
{
return 0;
}
g++ не дает проблем во время компиляции/ссылки.
Теперь, если у меня есть тот же заголовок, но вместо источника С++ исходный файл C test.c
:
#include "testheader.h"
int main()
{
return 0;
}
И компилирую с gcc, я получаю следующую ошибку:
error: redefinition of struct myinnerstruct
Итак, я понимаю, что область действия версии C является единицей перевода, а версия С++ - блочной областью? Может ли кто-то подтвердить, что это так, и, возможно, объяснить мне, почему это имеет смысл? Я делаю некоторое смешивание кода C и С++, и это дает мне немного неприятностей.
Любое понимание очень ценится. Спасибо!