|
Можно ли задать 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:57
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(ViKo @ Nov 16 2012, 14:41)  Это заменяет
? Нет, это просто защита от повторного включения внутри единицы компиляции, коей является c/cpp файл. аналог #pragma once А речь идет о включении в разные модули, которые скомпилируются независимо и без вопросов, а в результате в разных объектных файлах окажутся одинаковые имена объектов, и уже линкер начнет вопить.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Nov 16 2012, 12:04
|

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

|
Цитата(MrYuran @ Nov 16 2012, 14:57)  Нет, это просто защита от повторного включения внутри единицы компиляции, коей является c/cpp файл. аналог #pragma once
А речь идет о включении в разные модули, которые скомпилируются независимо и без вопросов, а в результате в разных объектных файлах окажутся одинаковые имена объектов, и уже линкер начнет вопить. То, что я показал, позволяет мне в одном общем file.h собрать заголовочные файлы для всех составляющих проекта, и потом подключать только его во все files.c.
|
|
|
|
Сообщений в этой теме
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   demiurg_spb не совсем
Вам уже про LTO советовали, а я повторюс... Nov 16 2012, 11:19    ViKo Цитата(demiurg_spb @ Nov 16 2012, 14:19) ... Nov 16 2012, 11:49 _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
|
|
|