Как классифицируется ситуация, когда разные реализации встроенной функции связаны в один исполняемый файл?

Согласно правилу одного определения (ODR) у меня не может быть функцииопределено более одного раза в одном исполняемом файле - компоновщик будет возражать.Однако ODR игнорируется для встроенных функций:может быть определен в файле заголовка, который будет # включать в несколько файлов .cpp, и поэтому, когда полученные файлы .obj связаны вместе, компоновщик видит, что существует несколько экземпляров этой функции, и намеренно игнорирует это.Предполагается, что это та же самая функция, но только с использованием одного из экземпляров.Поскольку поведение программы сохраняется, никого не волнует.Но если по какой-либо причине, включая использование препроцессора , эти экземпляры имеют разные реализации, компоновщик снова выберет одну из функций, и разработчик даже не узнает, какая из них выбрана, пока он не проверит свою программу полностью.Как обстоят дела в последней ситуации, когда компоновщик выбирает одну из функций, а у них есть разные реализации, классифицированные?Это неопределенное поведение или какая-то другая ситуация?
7 голосов | спросил sharptooth 10 32010vEurope/Moscow11bEurope/MoscowWed, 10 Nov 2010 14:25:01 +0300 2010, 14:25:01

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132