Совместимы ли большинство системных Linux-заголовков с С ++? - PullRequest
3 голосов
/ 16 октября 2019

Совместимы ли большинство системных заголовочных файлов linux / API C ++?

Сегодня я пытался сделать что-то вроде этого:

#include <iostream>

extern "C" {
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
}


int main() {
  //socket exercise
}

Тогда мне сказал друг:

даже не нужно это делать ( дополнительный extern "C" {} ) в большинстве случаев, так как они являются системными заголовками.
сначала попробуйте, а потом переживайте.
не предполагайте, что системные заголовки несовместимы.
Вы можете на самом деле сломать вещи, делая это, поскольку у некоторых есть только C ++ экспорт

Но тогда я спросил:

Если я включу функцию библиотеки C и скомпилирую без ошибок. Гарантирует ли это, что библиотека, которую я включил, совместима с C ++, и тогда я могу безопасно ее использовать?

Ответ:

Нет, проверки нет.


Так что попробуйте сначала -> без ошибок -> не гарантирует совместимость с C ++.

Тогда что мне делать, например, с системными заголовками Linux? Потому что я не могу просто обернуть системные заголовки дополнительным оператором extern "C" {} («Я мог бы на самом деле все испортить, потому что некоторые экспортируют только C ++»).

Поэтому мне нужно проверить, есть ли __BEGIN_DECLS и __END_DECLS MARCOS определены в системном заголовочном файле для каждого заголовочного файла, который я использую? Если нет, то мне нужно обернуть его extern "C" {}? В противном случае я просто включаю это напрямую?

К вашему сведению, __BEGIN_DECLS и __END_DECLS определены как:

# define __BEGIN_DECLS  extern "C" {
# define __END_DECLS    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...