включая файл .c эквивалентно копированию и вставке содержимого файла непосредственно в файл, который включает его, точно так же, как если бы функция была непосредственно определена во включающем файле.
Вы можете увидеть, что такое компиляторсобирается скомпилировать, пытаясь скомпилировать ваш файл с флагом -E
(вывод препроцессора).Вы увидите, что ваша функция вставлена.
Так что она будет встроенной только из-за ключевого слова inline
и будет принудительно установлена с атрибутом always_inline
, даже если компилятор отказался бы встроить ее из-занапример, размер функции.
Совет: знайте, что вы делаете, когда включаете файл .c
из другого файла.Некоторые сборочные системы / make-файлы просто сканируют каталоги в поисках файлов с именем *.c
, чтобы они могли скомпилировать их отдельно.Размещение там, возможно, некомпилируемого C-файла может привести к сбою сборки, и, если он собирается, у вас могут появиться повторяющиеся символы при компоновке.Только не делайте этого.
Если вы хотите сделать это, поместите вашу функцию в файл .h
и объявите его static
, чтобы он не потерпел неудачу при ссылке, если включен во многие файлы .c(каждая функция будет выглядеть как другая)