Цитата(Метценгерштейн @ Mar 7 2012, 23:09)

Без extern "C" - на С++ не работает.
А что тут получается? Что дает extern "C" ? Принудительно эту функцию компилит как Си?
А потому что у C++ того - ... полиморфизм

. То бишь в нем разрешается иметь много одинаково названных функций, отличающихся только списком параметров и/или возвращаемым значением. А простой C такие вольности не позволяет.
А чтобы разные функции под C++ не перепутались, компилятору приходится их назвать по-разному, придумывая им названия из комбинации имени функции, которую ей дал программист, с шифром, указывающим на типы возвращаемого значения и параметров. Например, функцию:
char __low_level_init(void)
C++ компилятор мог бы скопилировать (дать метку) под именем C_V__low_level_init или как-нибудь в том же роде.
Поэтому на C++ обычно невозможно создать такую метку функции, чтобы она линковалась с "нормальными" библиотеками или ассемблерным кодом. Разве что на ассемблере можно создать метку, чтобы она с C++ой компиляцией совпадала. Впрочем, посредством extern "C" или других экстернов можно заставить С++ компилить функцию по другим правилам, только это уже не будет C++.
У обычного же C имена функций обычно предсказуемы, хотя и этот частенько модифицирует данное програмистом имя, добавляя к нему спереди префикс (чаще подчеркивание). И лишь славный ассемблер

компилит функции с тем же именем, как ее назвал программист.