У меня есть проект, который смешивает C и C ++. В заголовочном файле C у меня есть такой код:
typedef struct mystruct* mystruct;
struct mystruct {
// whatever struct needs
};
И чтобы использовать это в файле C ++, я делаю:
extern "C" {
#include "mystruct.h"
}
Итак, вы видите, что я создаю непрозрачный указатель с теми же именами. Это хорошо в C, но не в C ++ (из-за необходимости создания экземпляра с использованием ключевого слова struct в C, но не в C ++). Тем не менее, я получаю сообщение об ошибке (конфликтующие объявления) при попытке компилировать код C ++. Я думал, что использование extern "C"
заставит компилятор обрабатывать заголовок C как C, но, похоже, он все еще использует его как C ++. Есть ли объяснение тому, что здесь происходит?