|
Можно ли задать inline функцию, если она определена в другом файле? |
|
|
|
 |
Ответов
|
Nov 15 2012, 12:10
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Если последний вопрос ко мне, то у меня есть заголовочный файл (упрощенно говоря) fun.h, который подключается к main.c файлу, и где был описан прототип функции: bool Timer_check(void); А если добавить inline и к прототипу, и к определению функции, то не компилируется. А если всю функцию перенести в заголовочный файл fun.h, то работает, независимо, static или без... только размерчик получился больше (!), чем когда функция была определена в fun.c файле. Code = 29744 вместо 29224.
upd. не ту функцию показал, поправил.
P.S. А если добавляю inline только к прототипу или к определению, то компилируется, но уже с размером 29232! (А-а-а-а-а! зачем же я пьянствовал вчера, надо было бы сегодня!)
|
|
|
|
|
Nov 15 2012, 12:34
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(ViKo @ Nov 15 2012, 15:10)  размерчик получился больше (!), чем когда функция была определена в fun.c файле. Code = 29744 вместо 29224. Дался Вам этот кейл... В ГЦЦ Код static inline __attribute__((always_inline)) void somefunc(const int argument) И всё. Ничего не растет без спроса у хозяина битов
|
|
|
|
|
Nov 15 2012, 13:15
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(_Pasha @ Nov 15 2012, 15:34)  Дался Вам этот кейл... В ГЦЦ И в Keil есть такие штуки (эквивалентны): __attribute__((always_inline)) __forceinline Добавляются к прототипу функции.
|
|
|
|
|
Nov 15 2012, 13:27
|
Гуру
     
Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640

|
Цитата(ViKo @ Nov 15 2012, 17:15)  И в Keil есть такие штуки (эквивалентны): __attribute__((always_inline)) __forceinline Добавляются к прототипу функции. это к функциям в файле относится, у gcc тоже есть always_inline http://gcc.gnu.org/onlinedocs/gcc/Inline.htmlЦитата(ViKo @ Nov 15 2012, 16:10)  Если последний вопрос ко мне, то у меня есть заголовочный файл (упрощенно говоря) fun.h, который подключается к main.c файлу, и где был описан прототип функции: для инлайна ему нужен не прототип, а код функции. вопрос был риторический я для каких-то извращенных архитектур, где вообще стека нету, сталкивался с тем, что инлайлинье делает линкер при сборке "экзешника", но это исключительное извращение, по-моему в нынешних компиляторах нет такой фазы, чтобы шарится по всем объектникам и искать там коды для инлайнов ----------- btw: static к определению фукнции (или переменной) дописывают чтобы не загаживать пространство имен, она как бы локальная получается и линкер такой функции не видит (это для больших проектов полезно) у фукнции или не стековой (обычно называют глобальной) переменной это больше ни на что не влияет.
|
|
|
|
Сообщений в этой теме
ViKo Можно ли задать inline функцию, если она определена в другом файле? Nov 15 2012, 11:40 MrYuran Цитата(ViKo @ Nov 15 2012, 15:40) Или над... Nov 15 2012, 11:54 yes а как компилятор узнает, какой код ему инлайнить? ... Nov 15 2012, 11:54  _Артём_ Цитата(_Pasha @ Nov 15 2012, 14:34) Дался... Nov 15 2012, 12:53    ViKo Цитата(yes @ Nov 15 2012, 16:23) это к фу... Nov 15 2012, 13:27 MrYuran Цитата(ViKo @ Nov 15 2012, 16:10) А если ... Nov 16 2012, 10:33  ViKo Цитата(MrYuran @ Nov 16 2012, 13:33) Стои... Nov 16 2012, 10:41   demiurg_spb не совсем
Вам уже про LTO советовали, а я повторюс... Nov 16 2012, 11:19    ViKo Цитата(demiurg_spb @ Nov 16 2012, 14:19) ... Nov 16 2012, 11:49   MrYuran Цитата(ViKo @ Nov 16 2012, 14:41) Это зам... Nov 16 2012, 11:57    ViKo Цитата(MrYuran @ Nov 16 2012, 14:57) Нет,... Nov 16 2012, 12:04 _Pasha Цитата(ViKo @ Nov 15 2012, 17:27) А зачем... Nov 15 2012, 13:40 toweroff Цитата(_Pasha @ Nov 15 2012, 17:40) Патам... Nov 15 2012, 16:53  _Pasha Цитата(toweroff @ Nov 15 2012, 20:53) объ... Nov 15 2012, 17:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|