GCC и встроенные функции C, объявленные в других файлах (проблема «тело функции недоступно») - PullRequest
3 голосов
/ 22 июня 2011

У меня странная проблема со встроенными функциями, определенными в разных файлах Рассмотрим следующий сценарий.

в main.c:

#include "inline.h"
int main(void) {
    int i = 0;
    for (i = 0; i<=100000; i++) {
        omfg(i);
    }
    return 0;
 }

inline.h:

inline int omfg(unsigned int num);

и inline.c:

#include <stdio.h>
inline int omfg(unsigned int num) {
    int i = 0;
    for (i = 0; i<= 10; i++) {
        printf(".");
        num++;
    }
    return num;
 }

Когда я компилирую с gcc, используя нечто похожее на:

$ gcc inline.c main.c -o binary -Wall -Winline -Wextra -O2

Я получаю:

main.c: In function 'main':
inline.h:2: warning: inlining failed in call to 'omfg': function body not available
main.c:7: warning: called from here

Что я делаю не так? Должен ли я объявить omfg() по-другому? Это довольно загадочно ...

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Переместить реализацию в файл заголовка.Вы можете объявить функцию заранее, а затем определить ее ниже, или даже #include специальный файл, такой как inline.inl в нижней части заголовка, чтобы скрыть его, но, по сути, определение функции должно быть доступно, если оно будет встроенным.

2 голосов
/ 22 июня 2011

Вы должны поместить реализацию вашей встроенной функции в заголовочный файл, если вы хотите, чтобы это компилировалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...