Функция Extern C внутренне использует класс C ++

Это законно? Я хочу экспортировать функцию C, но внутри эта функция будет использовать класс C ++.

extern "C" BOOL /*BOOL==int*/ Func()
{
   return someclass::getinstance()->Func(); // this is just bool tho
}

person Harry    schedule 26.10.2014    source источник
comment
Я не знаю, в каком документе (ах) содержится официальное руководство, но я вижу, что это делается постоянно.   -  person NPE    schedule 26.10.2014


Ответы (1)


Это совершенно законно. Цель extern «C» - предотвратить искажение имени Func () (украшенное информацией о типе), чтобы модуль C мог ссылаться на него, используя его простое имя. C ++ изменяет имена, чтобы можно было разрешить функции с одинаковыми именами, но с разными списками параметров (перегрузка функций).

person Amardeep AC9MF    schedule 26.10.2014
comment
+1 Собственно, это очень распространенная практика. Хотя ни один из них не стандартизирован (AFAIK), схема изменения имени C обычно согласована, в то время как C ++ повсюду. Таким образом, функции, экспортируемые как из статических, так и из общих библиотек, обычно записываются как extern "C" для использования схемы C и обеспечения большей совместимости между компиляторами (и даже между разными версиями одного и того же компилятора) при связывании с скомпилированными библиотеками. Остальная часть этой вики-статьи содержит хорошие объяснения. - person Jason C; 26.10.2014