Может ли встроенная функция, определенная в двух отдельных файлах 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

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