LINUX.ORG.RU

У C и C++ разный mangling идентификаторов (не знаю уж, как это по-русски-то будет).

extern "C" говорит копилятору C++, что надо делать так же, как в C. Что б можно было пользоваться библиотеками C в C++ и наоборот.

watashiwa_daredeska ★★★★
()

> Зачем обрамлять некоторые хидеры такой конструкцией? 

Обрамление:
extern C {
...
}

Служит указанием компилятору С++ создавать код строго 'С'.
То есть не будут добавляться к именам функций дополнительные символы,
что делает компилятор C++.

Это нужно для использования в С-коде.
Ядро Unix и многие системные утилиты разработаны на языке 'С'
Поэтому нужен код С а не С++.
Например dlsym() возвращает указатель на функцию из загруженной
ранее библиотеки. Функция указатель которой мы хотим получить
должна быть оформлена как:  'extern C'

> Почему не все так обрамляются? C и C++?

Потому что не нужно для всех.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.