Alechin (17.05.2005 17:41, просмотров: 2367)
Вопрос по inline функциям Имею проект следующего состава:
группа 1:
файл func_b.h с объявлением функции:
char Func_B(void);
файл func_b.cpp с определением функции:
inline char Func_B(void) { return 5; }
группа 2:
файл func_a.h с объявлением функции:
#include "func_b.h"
char Func_A(void);
файл func_a.cpp с определением функции:
inline char Func_A(void) { return 5 + Func_B(); }
основная программа:
файл main.h:
#include "func_a.h"
файл main.cpp:
int main() { char i = Func_A(); return 0; }
Компилирую - ошибок нет. Листинги обеих файлов с объявлениями функций не содержат src кода, так как он подставляемый. Листинг main.cpp содержит вызов функции Func_A, хотя там должен быть подставлен исходный код Func_A, в которую в свою очередь должен быть подставлен исходный код Func_B.
Линкую - ошибка - функция Func_A не определена.
При этом если все разместить в одном файле - ошибок нет, коды всех функций подставлены в основную. Такое ощущение, что область видимости inline функции всего файл, где она определена.
В хелпе по inline функциям не нашел ничего информативного.
В чем может быть причина такого поведения, и как это обойти?
На вопрос зачем отвечу - хотел избавиться от кучи макросов (определенных через define), заменяющих несложные действия.
Правда при этом в хелпе вычитал примерно следующее - pragma inline отключает эвристический анализатор компилятора - то биш инлайн не отличается от define. Хотя всегда в преимущества инлайн функций как раз и возводили возможность всяческих их проверок компилятором.
Это тоже непонятно.