Итак, скажем, у меня есть следующий заголовок С++, 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 и С++, и это дает мне немного неприятностей.
Любое понимание очень ценится. Спасибо!
