История изменений
Исправление MOPKOBKA, (текущая версия) :
А что значит?
а тело функции не видно
У тебя наверное типичный проект, где есть разделение на .h/.c файлы, и .c файлы превращаются в .o а потом линкуются в .exe.
Так вот, когда компилятор компилирует A.c, где есть вызов функции которая закодирована в B.c, то он НЕ может произвести оптимизацию функции из B.c или встроить ее вместо вызова. Потому что весь код что он видит, это A.c и заголовочные файлы.
То есть B.c он не видит, и тела функций в B.c он тоже не видит.
Именно поэтому нужно определять inline функции не в B.c если их нужно вызвать из A.c, а нужно определять их именно в B.h где компилятор их сможет увидеть, если этот заголовочный файл будет подключен к А.c
MOPKOBKA: Если они передаются по указателю, а тело функции не видно, то не пакует
Теперь когда понятно что значит видит/не видит, можно посмотреть на ситуацию, когда компилятор видит тело функции, пусть функция и использует указатели: https://godbolt.org/z/Phjv9aYKx
За счет того что компилятор увидел тело твоей функции с указателями, он может ее оптимизировать в нормальную.
Для того что бы компилятор видел все .c файлы, можно использовать LTO либо их все вместе компилировать. Но это не так уж и важно на самом деле, думаю в твоем проекте сейчас важнее что то написать, а улучшать можно когда все будет работать.
Исходная версия MOPKOBKA, :
А что значит?
а тело функции не видно
У тебя наверное типичный проект, где есть разделение на .h/.c файлы, и .c файлы превращаются в .o а потом линкуются в .exe.
Так вот, когда компилятор компилирует A.c, где есть вызов функции которая закодирована в B.c, то он НЕ может произвести оптимизацию функции из B.c или встроить ее вместо вызова. Потому что весь код что он видит, это A.c и заголовочные файлы.
То есть B.c он не видит, и тела функций в B.c он тоже не видит.
Именно поэтому нужно определять inline функции не в B.c если их нужно вызвать из A.c, а нужно определять их именно в B.h где компилятор их сможет увидеть, если этот заголовочный файл будет подключен к А.c
MOPKOBKA: Если они передаются по указателю, а тело функции не видно, то не пакует
Теперь когда понятно что значит видит/не видит, можно посмотреть на ситуацию, когда компилятор видит тело функции, пусть функция и использует указатели: https://godbolt.org/z/Phjv9aYKx