Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Странный вопрос про inline / 17 сообщений из 17, страница 1 из 1
18.02.2006, 00:08
    #33553590
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
Что-то спутал. Может кто подскажет.
Возможно ли сделать объявление inline-функции в заголовочном файле, а ее определение в *.cpp. Вроде, непонятно,при описании в заголовочном файле функции требуется указать как external, а тогда нельзя указывать inline. Или я чего-то путаю? Поправьте, ежели чего.

PS
Конечно, можно просто сделать include этого файла в заголовочный, но это не интересно, вроде, не рекомендуется, да и лучше тогда сразу определние функции в самом заголовочном файле писать - чего препроцессор зря мучить.
...
Рейтинг: 0 / 0
18.02.2006, 01:37
    #33553641
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
А зачем их в cpp выносить? inline по определению должны быть малюсенькими, в одну-две команды. И external они естественно быть не могут.

Хотя один из подходов к написанию программ утверждает что inline вообще использовать не надо. Оптимизатор в компиляторе и так умный, сам догадается если какую-то функцию можно вставить напрямую.
...
Рейтинг: 0 / 0
18.02.2006, 10:24
    #33553744
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
Возможно ли сделать объявление inline-функции в заголовочном файле, а ее определение в *.cpp

нет
...
Рейтинг: 0 / 0
19.02.2006, 18:01
    #33554538
nikname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
class A{

public:
inline int a();
void b(int c){return ++c}

};


int a::a()
{ return 0;}

и a и b - обе inline но вообще это - по выбору компилятора.
...
Рейтинг: 0 / 0
20.02.2006, 00:48
    #33554752
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
White OwlА зачем их в cpp выносить?
Прсто пивычка. Есть несколько функций. Выполняют однуи ту же функцию (оопс, тавтология). Первая исходит из правильности входных данных, когда это верно, вызываешь ее (такое во многих местах можно гарантировать). Так сказать GIGO = Garbage In -> Garbage Out. Другая перед расчетом делает кучу проверок, а на точно подходящие данные вызывает свою быструю подругу. В некоторых местах достаточно одной проверки на массу вызовов этой (быстрой) функции. Тело функции с проверкой хранится в cpp, привык и вторую хранить рядом. Теперь придется выкинуть в заголовок.
Что касается пользовать inline - пользуешь, в соответствующие места подставляется кусок кода, вместо вызова функции. Пухнет экзешник, но каплю времени можно выиграть. Мне это и нужно. А доввериться компилятору - так я не заю его критерии оптимизации, хотя, конечно, повлиять на них, теоретически, могу, указав ключи оптимизиции.

To nickname:
Я знаю, что функции-члены класса с определением внутри объявления класса по-возможности инлайнятся (пример а).
С примером b - зависят от установки параметров оптимизации, но в общем случае не угадаешь.
...
Рейтинг: 0 / 0
20.02.2006, 00:59
    #33554755
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
Забыл добавить. Я понимаю, что inline-функция не обязательно будет подставлена вместо вызова. Напрмер, если в ней есть try-блок, то - точно нет. Это просто подсказка компилятору. Так сказать, пожелание. Но если нет ляпов, как с try-catch, то обычно постановка будет выполнена. Во всяком случае, он постарается ее обязательно выполнить ... если, онечно, в опциях не поставлено такие подсказки игнорировать. Напрмер, в CBuilder 5 по умолчанию register игнорируется, но это так, к слову.
...
Рейтинг: 0 / 0
20.02.2006, 14:02
    #33555778
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
BagaBaga...Возможно ли сделать объявление inline-функции в заголовочном файле, а ее определение в *.cpp.....


да, возможно... но работать не будет...
почему ?
да поставте ся на место того компилятора...
есть этап компиляции - получение обьектного кода и записи его в файлы с расширение обжик... вот Вы (компилятор) идёте по тексту программы. Натыкаетесь на инструкцию inline и ??? и что Вы должны подставить в код, где был вызов этой ботвы ? Сколько байт резервировать ? Может колл и размер под указатель ? Но позвольте, она тоды уже не инлайн - по определению... Кхм.. Ну например Вы можете дотянутся до сырцов си пипи и что ? компилять, проверять бросив предыдущий кусок ? А если и там инлайн ? и вообще всё зацикленно ?

отсюда и понятно - на этапе превращения текста в бинарный код компилятор ДОЛЖЕН ВСЁ ЗНАТЬ об этой INLAIN функции...

Кстати инлайн метод автоматом НЕ выйдет, если класс будет ВНЕШНИМ. Хотя сразу оговорюсь - тестилось на шестёрки MSVC...

с уважением
(круглый)
...
Рейтинг: 0 / 0
20.02.2006, 15:53
    #33556181
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
Так сделать можно, стандарт это не запрещает. Но как INLINE функция почти наверняка не будет подставляться, поскольку ни один компилятор это делать не умеет.
...
Рейтинг: 0 / 0
20.02.2006, 16:20
    #33556303
LeonM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
можно, хотя неудобно. в VC6 - несоответствие стандарту, нужно, кажется, __inline или __forceinline.
...
Рейтинг: 0 / 0
20.02.2006, 23:31
    #33557114
Afix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
BagaBaga
PS
Конечно, можно просто сделать include этого файла в заголовочный, но это не интересно, вроде, не рекомендуется, да и лучше тогда сразу определние функции в самом заголовочном файле писать - чего препроцессор зря мучить.
Страуструп рекомендует всё наоборт:избегать включение в .h обычных определений фурнкций как и переменных, а inline включать в .h
...
Рейтинг: 0 / 0
21.02.2006, 14:26
    #33558425
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
AfixСтрауструп рекомендует всё наоборт:избегать включение в .h обычных определений фурнкций как и переменных, а inline включать в .h


я бы ышо добавил - избегать включения ашников в другие ашники...чревато на больших проектах, при работе более одного программиста...


с уважением
(круглый)
...
Рейтинг: 0 / 0
21.02.2006, 14:38
    #33558459
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
kolobok0я бы ышо добавил - избегать включения ашников в другие ашники...чревато на больших проектах, при работе более одного программиста...а что ж конструкции типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#ifndef VCL_H
#define VCL_H

#include <vcl0.h>

#endif  // VCL_H

не спасают ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21.02.2006, 14:41
    #33558476
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
Карабас Барабас...а что ж конструкции типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#ifndef VCL_H
#define VCL_H

#include <vcl0.h>

#endif  // VCL_H

не спасают ?
Posted via ActualForum NNTP Server 1.3

проблема не в повторном вляпывании определений...вовсе не в них...СЁЭр...проблема в получении разных бинарников, либо не правильно работающего кода....ежели не ребилдом пользоваться...почему нуна обьяснять ?

(круглый)
...
Рейтинг: 0 / 0
21.02.2006, 15:51
    #33558731
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
kolobok0 Карабас Барабас...а что ж конструкции типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#ifndef VCL_H
#define VCL_H

#include <vcl0.h>

#endif  // VCL_H

не спасают ?
Posted via ActualForum NNTP Server 1.3

проблема не в повторном вляпывании определений...вовсе не в них...СЁЭр...проблема в получении разных бинарников, либо не правильно работающего кода....ежели не ребилдом пользоваться...почему нуна обьяснять ?

(круглый)

Утилита make создана для того чтобы эти пробемы решать.
Она ко всему прочему может(должна)
учитывать изменения h файлов при очередной зборке.

В больших уважающих себя проектах всегда должен быть ответственный за
поддержку makefile в актуальном состоянии.
...
Рейтинг: 0 / 0
21.02.2006, 16:13
    #33558815
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
onstat-
Утилита make создана для того чтобы эти пробемы решать.


Утилита make никаким образом не связана с языком С++.
...
Рейтинг: 0 / 0
21.02.2006, 16:17
    #33558827
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
onstat-Утилита make создана для того чтобы эти пробемы решать.
Она ко всему прочему может(должна)
учитывать изменения h файлов при очередной зборке.
В больших уважающих себя проектах всегда должен быть ответственный за
поддержку makefile в актуальном состоянии.

про make не скажу.... давно юзал его при создании серваков под Novell. А вот MSVC студия не чуствительна ко вложенным ашникам в ашниках (простите за тофтологию). Ну и имеем...не совсем то, что хотели...

в больших проектах, как страховка - полный ребилд при отслюнявливании очередного релиза на тестирование....

с уважением
(круглый)
ЗЫ
Студия - вообще, вещь в себе... Столько багов...Млин и даже не исправляются от версии к версии. Славо богу в 2005 подправили глюк 65535 при компиляции сборок си бимоля...
...
Рейтинг: 0 / 0
21.02.2006, 16:31
    #33558869
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный вопрос про inline
MasterZiv onstat-
Утилита make создана для того чтобы эти пробемы решать.


Утилита make никаким образом не связана с языком С++.

Она не связана напрямую, зато сильно облегчает
сборку программ написанных на С++.

Вы предлагаете не пользоватся make, отладчиками, РАД и прочими
утилитами созданными для облегчения труда програмиста и напрямую
не имеющими отношения к языку?

Если make в данном разделе оффтопик ..... ммм ...,
в общем мне нечего больше сказать.
Прошу прощения, больше о ней упоминать не буду.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Странный вопрос про inline / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]