Есть ли способ определить встроенную функцию C в файле .c, а не в файле .h?

Насколько я знаю, тело встроенной функции C должно быть определено в файле .h, потому что оно вызывает ошибку «имя функции используется, но никогда не определяется», если тело определено в файле .c.

Это штатный способ? Или как определить тело встроенной функции в файле .c?


person eonil    schedule 02.05.2010    source источник


Ответы (1)


Каждый .c файл компилируется независимо в .o вывод. Если вы определяете встроенную функцию в файле .c, другие исходные файлы не могут видеть такую ​​функцию, поэтому ее нельзя встроить.

Поэтому встроенная функция должна быть в файле .h, чтобы разрешить общий доступ к коду.

person kennytm    schedule 02.05.2010
comment
Спасибо! Вы меня очень спасаете :) - person eonil; 02.05.2010
comment
Вы профилировали свой код, чтобы увидеть, должна ли эта функция быть встроена, или это случай goo.gl/bquz ? - person JUST MY correct OPINION; 02.05.2010
comment
@ttmrichter: (не по теме) Это не твиттер, нет необходимости преждевременно сокращать URL-адрес. - person kennytm; 02.05.2010
comment
@Eonil: обратите внимание, что если встроенная функция когда-либо используется только в одном файле .c, она может быть определена как static inline в этом файле .c, а не в файле .h. В противном случае, как уже говорилось, мне нужно сделать его видимым в файле .h. - person Paul R; 02.05.2010
comment
@KennyTM: Я уверен, что это хорошая острота, но я не уверен, что ты имеешь в виду. (Я не занимаюсь твиттингом, поэтому, если он основан на знании специфики твитинга, он определенно пролетит над моей головой.) - person JUST MY correct OPINION; 02.05.2010
comment
@ttmrichter: Я имею в виду, что вы можете ввести здесь 600 символов, чтобы вы могли просто опубликовать весь URL-адрес c2.com /cgi/wiki?Преждевременная оптимизация. - person kennytm; 02.05.2010
comment
@KennyTM: Ах. Я понимаю что ты имеешь ввиду. В наши дни я делаю все, что нужно для сжатия URL-адресов, потому что многие URL-адреса состоят из сотен символов. Это просто моторная память. :) - person JUST MY correct OPINION; 02.05.2010
comment
@KennyTM Я знаю, что компилятору можно передать несколько файлов c так же, как вы можете сделать это с помощью компоновщика. Позволит ли это вам поместить тело встроенной функции в файл c? - person PICyourBrain; 18.02.2013