Я нахожу такие примеры в коде Boost.
namespace boost {
namespace {
extern "C" void *thread_proxy(void *f)
{
....
}
} // anonymous
void thread::thread_start(...)
{
...
pthread_create(something,0,&thread_proxy,something_else);
...
}
} // boost
Зачем вам это нужно extern "C"
?
Понятно, что функция thread_proxy
является закрытой внутренней, и я не ожидаю, что она
будет искажен как "thread_proxy", потому что на самом деле он мне вообще не нужен.
Фактически, во всем моем коде, который я написал и который работает на многих платформах, я никогда не использовал extern "C"
, и это работало как есть с обычными функциями.
Почему extern "C"
добавлено?
Моя проблема в том, что extern "C"
функции загрязняют глобальное пространство имен, и они на самом деле не скрыты, как ожидает автор.
Это не дубликат!
Я не говорю о калечащих и внешних связях. В этом коде очевидно, что внешняя связь нежелательна!
Ответ: Соглашения о вызовах функций C и C ++ не обязательно совпадают, поэтому вам нужно создать соглашение с соглашением о вызовах C. См. 7.5 (p4) стандарта C ++.