Avatar ·

O que faz extern "C" em C++ e para que serve?

Olá a todos! Escrevo em C++ há pouco tempo e, no processo de trabalhar com bibliotecas em C (por exemplo, com alguma biblioteca gráfica antiga), constantemente me deparo com a construção `extern "C"`. Eu a vejo em arquivos de cabeçalho, mas não entendo completamente o que ela faz.\n\nPor exemplo, tenho este código:\n\n```cpp\n// mylib.h\n#ifdef __cplusplus\nextern "C" {\n#endif\n\nvoid my_c_function(int x);\n\n#ifdef __cplusplus\n}\n#endif\n```\n\nOu quando eu mesmo incluo um arquivo de cabeçalho em C:\n\n```cpp\n// main.cpp\nextern "C" {\n #include "clibrary.h"\n}\n```\n\nLi que isso tem algo a ver com "name mangling" (nomeação de funções no binário), mas não consigo entender exatamente como funciona. Por que sem `extern "C"` meu programa não consegue encontrar a função de uma biblioteca em C e gera um erro de linkagem do tipo