Ограничения для функций, объявленных как `extern & quot; C & quot;`? Возможности C ++ все еще пригодны для использования?

Есть ли extern "C" сделать что-то еще, кроме указания идентификатора не должны быть искалечены?

Доступны ли функции C ++ в функциях, которые были объявлены как extern "C"?

5

Решение

Это влияет только на искажение имени, так что внешняя видимость ясна для других приложений.

2

Другие решения

extern "C" делает не значит компилировать как C-код. Это значит только чтобы функция была скомпилирована так, чтобы ее можно было вызывать из кода C; то, что на самом деле влияет, зависит от реализации. Все, что вы можете сделать в C ++, прекрасно в такой функции, включая создание исключений.

1

Вы не должны выбрасывать исключения из них, но в противном случае вы можете реализовать тело extern "C" Функция с таким количеством функций C ++, как вам нравится.

Это прекрасно

MyObject myobj;
extern "C" {
int myfunc(char *c)
{    // c++ features used here
std::string s = myobj.method(....
}
}
0
По вопросам рекламы [email protected]