|
Определение inline функции, Обязательно в хедере? |
|
|
|
Dec 13 2008, 10:38
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Есть несколько файлов исходника: LCD.h с объявлением функции: Код inline void lcdClearScreen(); LCD.c с определением: Код inline void lcdClearScreen() { lcdWriteCommand(0x01); }; и вызов этой функции из третьего файла I2C.c: Код #include "lcd.h" ... lcdClearScreen(); Что-то первый раз столкнулся с тем, что, при компиляции файла I2C.c, компилер выдаёт ошибку про отсутствие определения этой функции Вышел из положения включением определения функции в хедер LCD.h: Код inline void lcdClearScreen() { lcdWriteCommand(0x01); }; Получается, inline функции необходимо определять сразу при объявлении?
|
|
|
|
|
 |
Ответов
|
Jun 3 2012, 13:53
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Rash @ Jun 3 2012, 16:43)  не знаю проблема или нет Проблема. Потому что во время компиляции файл2.c компилятор понятия не имеет ни о существовании файл1.c, ни о его содержимом и, соответветственно, о том, что же именно ему нужно вставить в место вызова этой функции. Чтобы он имел возможность встроить, тело функции должно быть ему доступно, а значит располагаться либо в файл2.c, либо в любом файле, включенном в него директивой #include. Других вариантов нет. Хотите красоты - делайте функцию невстраиваемой. По этому пути пошли создатели CMSIS. В ней, чтобы записать одно значение в один регистр вызывается функция со всеми вытекающими тормозами и раздутием кода.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 3 2012, 21:39
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Сергей Борщ @ Jun 3 2012, 16:53)  Хотите красоты - делайте функцию невстраиваемой. По этому пути пошли создатели CMSIS. Это красота? В CMSIS полно inline-функций. В чём неправильность их пути? Цитата(Сергей Борщ @ Jun 3 2012, 16:53)  В ней, чтобы записать одно значение в один регистр вызывается функция со всеми вытекающими тормозами и раздутием кода. А как лучше делать?
|
|
|
|
Сообщений в этой теме
sonycman Определение inline функции Dec 13 2008, 10:38 Сергей Борщ Цитата(sonycman @ Dec 13 2008, 12:38) Пол... Dec 13 2008, 14:38 sonycman А, понятно
То есть компилер за один проход долж... Dec 13 2008, 20:29 Сергей Борщ Цитата(sonycman @ Dec 13 2008, 22:29) То ... Dec 14 2008, 00:36 Rash возникла таже проблема, но так и не понял как её р... Jun 2 2012, 16:56 _Артём_ Цитата(Rash @ Jun 2 2012, 19:56) Можно пр... Jun 2 2012, 17:13 Rash спасибо, т.е. тело функции должно быть в h файле?
... Jun 2 2012, 17:35 _Артём_ Цитата(Rash @ Jun 2 2012, 20:35) т.е. тел... Jun 2 2012, 19:23 Rash Цитата(_Артём_ @ Jun 2 2012, 22:23) У мен... Jun 2 2012, 20:46 Dog Pawlowa Цитата(Rash @ Jun 2 2012, 23:46) Да не по... Jun 3 2012, 05:34 VladislavS Что-то вы проблему на ровном месте придумали. Чтоб... Jun 3 2012, 05:35     aaarrr Цитата(_Артём_ @ Jun 4 2012, 02:17) А поч... Jun 3 2012, 22:20      AHTOXA Мне кажется, тут разные люди говорят о разных CMSI... Jun 4 2012, 04:21       _Артём_ Цитата(AHTOXA @ Jun 4 2012, 07:21) Зато у... Jun 4 2012, 10:18       aaarrr Цитата(AHTOXA @ Jun 4 2012, 08:21) Кстати... Jun 4 2012, 12:33        AHTOXA Цитата(aaarrr @ Jun 4 2012, 18:33) Мне хв... Jun 4 2012, 12:41         aaarrr Цитата(AHTOXA @ Jun 4 2012, 16:41) Да, эт... Jun 4 2012, 13:11        scifi Цитата(aaarrr @ Jun 4 2012, 16:33) Мне хв... Jun 4 2012, 12:43         Dog Pawlowa Цитата(scifi @ Jun 4 2012, 15:43) STишная... Jun 4 2012, 12:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|