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

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как классифицируется ситуация, когда разные реализации встроенной функции связаны в один исполняемый файл?

Сообщение Anonymous »

Согласно одному правилу определения (ODR) у меня не может быть функции

Код: Выделить всё

void function()
{
}
определено более одного раза в одном исполняемом файле — компоновщик будет возражать. Однако ODR игнорируется для встроенных функций:

Код: Выделить всё

inline void function()
{
}
может быть определен в заголовочном файле, который будет #included в несколько файлов .cpp, поэтому, когда результирующие файлы .obj связываются вместе, компоновщик видит, что существует несколько экземпляров этой функции. и намеренно игнорирует это. Он предполагает, что это та же самая функция, и просто использует один из экземпляров. Поскольку поведение программы сохраняется, это никого не волнует.
Но если по какой-либо причине, включая использование препроцессора, эти экземпляры имеют разные реализации, компоновщик снова выберет одну из функций и разработчик даже не узнает, какая из них выбрана, пока тщательно не протестирует свою программу.
Как обстоят дела в последней ситуации, когда компоновщик выбирает одну из функций, а у них классифицированы разные реализации? Это неопределенное поведение или какая-то другая ситуация?

Подробнее здесь: https://stackoverflow.com/questions/414 ... n-are-link
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»