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