Avatar ·

O que faz extern "C" em C++ e por que é necessário ao trabalhar com bibliotecas C?

Olá! Comecei a estudar C++ e me deparei com a construção `extern "C"`, que vejo frequentemente em arquivos de cabeçalho. Por exemplo, em bibliotecas como SDL ou ao conectar funções C antigas. Aqui está um exemplo que encontrei em um artigo: ```cpp // my_header.h #ifdef __cplusplus extern "C" { #endif void my_c_function(int x); int another_c_function(const char* str); #ifdef __cplusplus } #endif ``` Entendo que isso tem a ver com linkagem e nomes de funções, mas não consigo entender os detalhes. Especificamente, estou interessado em: 1. Por que sem `extern "C"` podem ocorrer erros de linkagem ao usar funções C em C++? 2. O que é "name mangling" e como ele está relacionado a esse problema? 3. Por que envolver as declarações em `#ifdef __cplusplus`? Afinal, se estou escrevendo em C++, `__cplusplus` está sempre definido, certo? 4. Posso usar `extern "C"` para minhas próprias funções C++ se quiser que elas sejam acessíveis a partir de código C? Agradeço uma explicação com exemplos simples. Tentei pesquisar, mas...