|
Можно ли задать 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 16 2012, 10:41
|

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

|
Цитата(MrYuran @ Nov 16 2012, 13:33)  Стоит подключить fun.h к нескольким модулям, и сразу станет понятен смысл static. Без него линкер выдаст ошибку "Multiple definition" - одноименный объект создается в разных модулях. Это заменяет Код #ifndef FUN_H #define FUN_H ... #endif ?
|
|
|
|
|
Nov 16 2012, 11:49
|

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

|
Цитата(demiurg_spb @ Nov 16 2012, 14:19)  не совсем Вам уже про LTO советовали, а я повторюсь, что и у Кейла есть галочка типа "link-time code generation" - это фактически аналог LTO от gcc. В таком режиме все функции рассматриваются компилятором как static... Не галочка - опция. Цитата --ltcg This option instructs the compiler to create objects in an intermediate format so that Link-Time Code Generation (LTCG) optimizations can be performed. The optimizations applied include cross-module inlining to improve performance, and sharing of base addresses to reduce code size.
Note This option might significantly increase link time and memory requirements. For large applications it is recommended that you do the code generation in partial link steps with a subset of the objects.
The LTCG feature is deprecated. As an alternative ARM recommends you use the --multifile option.
Example The following example shows how to use the --ltcg option.
armcc -c --ltcg file1.c armcc -c --ltcg file2.c armlink --ltcg file1.o file2.o -o prog.axf Из галочек есть Use Cross-module optimization Понял, нужно читать помощь по Кейлу!
|
|
|
|
Сообщений в этой теме
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 Цитата(ViKo @ Nov 15 2012, 15:10) размерч... Nov 15 2012, 12:34  _Артём_ Цитата(_Pasha @ Nov 15 2012, 14:34) Дался... Nov 15 2012, 12:53  ViKo Цитата(_Pasha @ Nov 15 2012, 15:34) Дался... Nov 15 2012, 13:15   yes Цитата(ViKo @ Nov 15 2012, 17:15) И в Kei... Nov 15 2012, 13:27    ViKo Цитата(yes @ Nov 15 2012, 16:23) это к фу... Nov 15 2012, 13:27    XVR Цитата(yes @ Nov 15 2012, 17:27) по-моему... Nov 16 2012, 07:47   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
|
|
|