Может ли встроенная функция, определенная в двух отдельных файлах cpp, создавать повторяющиеся символы во время связыванC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли встроенная функция, определенная в двух отдельных файлах cpp, создавать повторяющиеся символы во время связыван

Сообщение Anonymous »

Я нашел в Интернете множество ресурсов, рассказывающих о том, что inline (и даже __attribute__((always_inline)) или __forceinline) не заставляет компилятор (например, gcc или VisualC++) встраивать функция. Но когда именно встроенные функции не будут применяться? Есть ли игрушечный пример?

Возможно, это не обязательно один и тот же вопрос: когда функция, помеченная тегом inline, включенная в два разных файла cpp, создаст проблемы во время связывания? А именно, генерировать повторяющиеся символы?

Вот конкретная песочница для попытки сломать встраивание компилятора и сгенерировать повторяющийся символ:

В myinline.h:

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

inline int myinline()
{
// code that cannot be inlined...
...
}
В aux.cpp:

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

#include "myinline.h"
int aux()
{
return my_inline();
}
В main.cpp:

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

#include "myinline.h"
int aux();
int main()
{
return aux() + my_inline();
}
Тогда, например. в случае gcc существует ли какой-то (минимальный) код для myinline, который приведет к дублированию символа при компиляции и связывании с:

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

g++ -o aux.o -c aux.cpp
g++ -o main.o -c main.cpp
g++ -o example aux.o main.o
?

Подробнее здесь: https://stackoverflow.com/questions/198 ... ate-symbol
Ответить

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

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

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

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

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