Встроенные функции C

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

f.h

int f();
inline int g();

f.c

#include "f.h"

inline int g() {
    return 5;
}

int f() {
    return 3 + g();
}

main.c

#include "f.h"
#include <stdio.h>

int main() {
    printf("%d", f());
    return 0;
}

Линкер

сообщает, что существует неопределенная ссылка на g. Однако, поскольку g используется только в файле f.c, я не могу определить, в чем именно заключается проблема.


person qrort    schedule 25.12.2019    source источник
comment
Вам нужно extern inline int g(); в одной единице перевода, в формате ISO C   -  person M.M    schedule 26.12.2019
comment
Это поможет показать вашу команду сборки, например. поскольку GNU C ведет себя иначе, чем ISO C   -  person M.M    schedule 26.12.2019


Ответы (1)


Из стандарта C (6.7.4 Спецификаторы функций)

7,,,Для функции с внешней связью применяются следующие ограничения: Если функция объявлена ​​с помощью спецификатора встроенной функции, она также должна быть определена в той же единице перевода

В вашем проекте функция g объявлена ​​в блоке перевода с main.

person Vlad from Moscow    schedule 25.12.2019