|
|
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
Что-то спутал. Может кто подскажет. Возможно ли сделать объявление inline-функции в заголовочном файле, а ее определение в *.cpp. Вроде, непонятно,при описании в заголовочном файле функции требуется указать как external, а тогда нельзя указывать inline. Или я чего-то путаю? Поправьте, ежели чего. PS Конечно, можно просто сделать include этого файла в заголовочный, но это не интересно, вроде, не рекомендуется, да и лучше тогда сразу определние функции в самом заголовочном файле писать - чего препроцессор зря мучить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2006, 00:08 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
А зачем их в cpp выносить? inline по определению должны быть малюсенькими, в одну-две команды. И external они естественно быть не могут. Хотя один из подходов к написанию программ утверждает что inline вообще использовать не надо. Оптимизатор в компиляторе и так умный, сам догадается если какую-то функцию можно вставить напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2006, 01:37 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
Возможно ли сделать объявление inline-функции в заголовочном файле, а ее определение в *.cpp нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2006, 10:24 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
class A{ public: inline int a(); void b(int c){return ++c} }; int a::a() { return 0;} и a и b - обе inline но вообще это - по выбору компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2006, 18:01 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
White OwlА зачем их в cpp выносить? Прсто пивычка. Есть несколько функций. Выполняют однуи ту же функцию (оопс, тавтология). Первая исходит из правильности входных данных, когда это верно, вызываешь ее (такое во многих местах можно гарантировать). Так сказать GIGO = Garbage In -> Garbage Out. Другая перед расчетом делает кучу проверок, а на точно подходящие данные вызывает свою быструю подругу. В некоторых местах достаточно одной проверки на массу вызовов этой (быстрой) функции. Тело функции с проверкой хранится в cpp, привык и вторую хранить рядом. Теперь придется выкинуть в заголовок. Что касается пользовать inline - пользуешь, в соответствующие места подставляется кусок кода, вместо вызова функции. Пухнет экзешник, но каплю времени можно выиграть. Мне это и нужно. А доввериться компилятору - так я не заю его критерии оптимизации, хотя, конечно, повлиять на них, теоретически, могу, указав ключи оптимизиции. To nickname: Я знаю, что функции-члены класса с определением внутри объявления класса по-возможности инлайнятся (пример а). С примером b - зависят от установки параметров оптимизации, но в общем случае не угадаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 00:48 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
Забыл добавить. Я понимаю, что inline-функция не обязательно будет подставлена вместо вызова. Напрмер, если в ней есть try-блок, то - точно нет. Это просто подсказка компилятору. Так сказать, пожелание. Но если нет ляпов, как с try-catch, то обычно постановка будет выполнена. Во всяком случае, он постарается ее обязательно выполнить ... если, онечно, в опциях не поставлено такие подсказки игнорировать. Напрмер, в CBuilder 5 по умолчанию register игнорируется, но это так, к слову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 00:59 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
BagaBaga...Возможно ли сделать объявление inline-функции в заголовочном файле, а ее определение в *.cpp..... да, возможно... но работать не будет... почему ? да поставте ся на место того компилятора... есть этап компиляции - получение обьектного кода и записи его в файлы с расширение обжик... вот Вы (компилятор) идёте по тексту программы. Натыкаетесь на инструкцию inline и ??? и что Вы должны подставить в код, где был вызов этой ботвы ? Сколько байт резервировать ? Может колл и размер под указатель ? Но позвольте, она тоды уже не инлайн - по определению... Кхм.. Ну например Вы можете дотянутся до сырцов си пипи и что ? компилять, проверять бросив предыдущий кусок ? А если и там инлайн ? и вообще всё зацикленно ? отсюда и понятно - на этапе превращения текста в бинарный код компилятор ДОЛЖЕН ВСЁ ЗНАТЬ об этой INLAIN функции... Кстати инлайн метод автоматом НЕ выйдет, если класс будет ВНЕШНИМ. Хотя сразу оговорюсь - тестилось на шестёрки MSVC... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 14:02 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
Так сделать можно, стандарт это не запрещает. Но как INLINE функция почти наверняка не будет подставляться, поскольку ни один компилятор это делать не умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 15:53 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
можно, хотя неудобно. в VC6 - несоответствие стандарту, нужно, кажется, __inline или __forceinline. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 16:20 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
BagaBaga PS Конечно, можно просто сделать include этого файла в заголовочный, но это не интересно, вроде, не рекомендуется, да и лучше тогда сразу определние функции в самом заголовочном файле писать - чего препроцессор зря мучить. Страуструп рекомендует всё наоборт:избегать включение в .h обычных определений фурнкций как и переменных, а inline включать в .h ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 23:31 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
AfixСтрауструп рекомендует всё наоборт:избегать включение в .h обычных определений фурнкций как и переменных, а inline включать в .h я бы ышо добавил - избегать включения ашников в другие ашники...чревато на больших проектах, при работе более одного программиста... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 14:26 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
kolobok0я бы ышо добавил - избегать включения ашников в другие ашники...чревато на больших проектах, при работе более одного программиста...а что ж конструкции типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 14:38 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас...а что ж конструкции типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Posted via ActualForum NNTP Server 1.3 проблема не в повторном вляпывании определений...вовсе не в них...СЁЭр...проблема в получении разных бинарников, либо не правильно работающего кода....ежели не ребилдом пользоваться...почему нуна обьяснять ? (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 14:41 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
kolobok0 Карабас Барабас...а что ж конструкции типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Posted via ActualForum NNTP Server 1.3 проблема не в повторном вляпывании определений...вовсе не в них...СЁЭр...проблема в получении разных бинарников, либо не правильно работающего кода....ежели не ребилдом пользоваться...почему нуна обьяснять ? (круглый) Утилита make создана для того чтобы эти пробемы решать. Она ко всему прочему может(должна) учитывать изменения h файлов при очередной зборке. В больших уважающих себя проектах всегда должен быть ответственный за поддержку makefile в актуальном состоянии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 15:51 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
onstat- Утилита make создана для того чтобы эти пробемы решать. Утилита make никаким образом не связана с языком С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 16:13 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
onstat-Утилита make создана для того чтобы эти пробемы решать. Она ко всему прочему может(должна) учитывать изменения h файлов при очередной зборке. В больших уважающих себя проектах всегда должен быть ответственный за поддержку makefile в актуальном состоянии. про make не скажу.... давно юзал его при создании серваков под Novell. А вот MSVC студия не чуствительна ко вложенным ашникам в ашниках (простите за тофтологию). Ну и имеем...не совсем то, что хотели... в больших проектах, как страховка - полный ребилд при отслюнявливании очередного релиза на тестирование.... с уважением (круглый) ЗЫ Студия - вообще, вещь в себе... Столько багов...Млин и даже не исправляются от версии к версии. Славо богу в 2005 подправили глюк 65535 при компиляции сборок си бимоля... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 16:17 |
|
||
|
Странный вопрос про inline
|
|||
|---|---|---|---|
|
#18+
MasterZiv onstat- Утилита make создана для того чтобы эти пробемы решать. Утилита make никаким образом не связана с языком С++. Она не связана напрямую, зато сильно облегчает сборку программ написанных на С++. Вы предлагаете не пользоватся make, отладчиками, РАД и прочими утилитами созданными для облегчения труда програмиста и напрямую не имеющими отношения к языку? Если make в данном разделе оффтопик ..... ммм ..., в общем мне нечего больше сказать. Прошу прощения, больше о ней упоминать не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 16:31 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33553641&tid=2031899]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
152ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 500ms |

| 0 / 0 |
