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