O que os vinculadores realmente fazem com funções multi-definidas `inline`?
Em C e C ++,inline
É claro que as funções com vínculo externo podem ter várias definições disponíveis no momento do vínculo, presumindo-se que essas definições sejam todas (espero) idênticas. (Obviamente, estou me referindo a funções declaradas com oinline
especificação de ligação, não para funções que o compilador ou o otimizador de tempo de link realmente alinha.)
Então, o que vinculadores comuns normalmenteFaz quando eles encontram múltiplas definições de uma função? Em particular:
Todas as definições estão incluídas na biblioteca executável ou compartilhada final?Todas as invocações da função estão vinculadas à mesma definição?As respostas às perguntas acima são exigidas por um ou mais dos padrões ISO C e C ++ e, se não, as plataformas mais comuns fazem a mesma coisa?P.S. Sim, eu sei que C e C ++ são linguagens separadas, mas ambos suportaminline
, e a saída do compilador normalmente pode ser vinculada pelo mesmo vinculador (por exemplo, GCCsld
), então acredito que não pode haver diferença entre eles nesse aspecto.