C é um dos idiomas mais antigos ainda existentes. Sua ABI é simples e praticamente todos os sistemas operacionais ainda em uso atualmente foram escritos nela . Enquanto alguns desses sistemas operacionais podem ter adicionado coisas, por exemplo, em C # /. NET ou qualquer outro item no topo, lá embaixo, eles estão muito mergulhados em C.
Isso significa que, para usar a funcionalidade fornecida pelo sistema operacional, praticamente todas as linguagens de programação existentes precisam de uma maneira de interagir com as bibliotecas C de qualquer maneira . Perl, Java, C ++, todos eles fornecem formas nativas de "falar C", porque precisavam se não quisessem reinventar todas as rodas existentes.
Isso faz do C o latim das linguagens de programação. (Quantos anos de internet antes dessa metáfora deve ser "o inglês das línguas de programação"?)
Ao escrever sua biblioteca em C, você obtém uma interface compatível com C de graça (obviamente). Se você estiver escrevendo sua biblioteca em C ++, poderá obter ligações C, por meio de extern "C"
declarações mencionadas.
No entanto , você pode obter essas ligações única para a funcionalidade que pode ser expresso em C .
Portanto, a API da sua biblioteca não pode usar ...
- modelos,
- aulas,
- exceções,
- quaisquer funções que tomem ou retornem objetos.
Um exemplo simples, você precisaria para fazer suas funções exportadas tomar e retornar matrizes ( []
) em vez de std::vector
(ou std::string
para que o assunto).
Portanto, você não apenas não seria capaz de fornecer as coisas boas que o C ++ tem a oferecer aos clientes da sua biblioteca, mas também teria que fazer um esforço adicional para "traduzir" a API da sua biblioteca de C ++ para "compatível com C" ( extern "C"
).
Por isso, pode- se afirmar que C é a melhor escolha para implementar uma biblioteca. Pessoalmente, acho que os benefícios do C ++ ainda superam o esforço necessário para uma extern "C"
API, mas sou apenas eu.