Что на самом деле делают компоновщики с многократно определенными функциями inline?

И в C, и в C ++inline функции с внешней связью могут, конечно, иметь несколько определений, доступных во время соединения, при условии, что все эти определения (мы надеемся) идентичны. (Я, конечно, имею в виду функции, объявленные сinline спецификация связи, а не функции, которые на самом деле указывает компилятор или оптимизатор времени ссылки.)

Так что же делают обычные линкерыделать когда они сталкиваются с несколькими определениями функции? Особенно:

Все ли определения включены в окончательный исполняемый файл или разделяемую библиотеку?Все ли вызовы функции связаны с одним и тем же определением?Требуются ли ответы на вышеуказанные вопросы по одному или нескольким стандартам C и C ++ ISO, и если нет, то делают ли большинство распространенных платформ то же самое?

Постскриптум Да, я знаю, что C и C ++ - это отдельные языки, но оба они поддерживаютinlineи их выходные данные компилятора обычно могут быть связаны одним и тем же компоновщиком (например, GCCld), поэтому я считаю, что не может быть никакой разницы между ними в этом аспекте.

Ответы на вопрос(4)

Ваш ответ на вопрос