С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208

Описатель inline

17.09.2012, 00:14. Показов 2185. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описатель inline должен располагаться только в прототипе или определении функции или и там, и там?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2012, 00:14
Ответы с готовыми решениями:

Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline?
Здравствуйте. Знаю теорию, но не понимаю, на сколько должна быть маленькая функция, чтоб она подошла под inline ? Как...

inline функции vs инструкции inline функций
Здравствуйте. Чтобы не писать повторно код, нужно использовать функции. Но если функции компактные, то их лучше делать inline функциями, т....

Когда закрывать описатель созданного потока?
Можно ли после создания потока сразу же закрывать его описатель: HANDLE hThread = (HANDLE)_beginthreadex(...); CloseHandle(hThread);...

18
 Аватар для Pure
228 / 52 / 7
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 26
17.09.2012, 00:26
bgm313, в прототипе. но если есть огромное желание то располагай и там и там
2
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
17.09.2012, 00:28
Не важно. Вообще он относится к прототипу (function declaration), но определение функции (function definition) включает в себя прототип.
1
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
17.09.2012, 00:33  [ТС]
Можно ли как-то определить сгенерировал компилятор встроенную функцию или нет?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
17.09.2012, 00:37
Посмотреть дизассемблерный листинг, работает 100%.

gcc можно сказать -Winline и он скажет, какие функции, которые явно или неявно должны были быть inline, он не смог заинлайнить.

У Студии, судя по этому, есть механизм "Я сказал, делай inline и не жалуйся".
0
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
17.09.2012, 00:48  [ТС]
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Посмотреть дизассемблерный листинг, работает 100%.
gcc можно сказать -Winline и он скажет, какие функции, которые явно или неявно должны были быть inline, он не смог заинлайнить
А что там в диз.коде должно быть? Как он помечает эти функции?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
17.09.2012, 00:56
Цитата Сообщение от bgm313 Посмотреть сообщение
А что там в диз.коде должно быть? Как он помечает эти функции?
он встраивает код функции вместо asm'ог call'a


Цитата Сообщение от bgm313 Посмотреть сообщение
Описатель inline должен располагаться только в прототипе или определении функции или и там, и там?
как правило в прототипе, или в отдельном хедере, доступном из хедера прототипа
собственно код inline функции должен быть доступен для встраивания
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
17.09.2012, 00:57
Посмотреть на место вызова заинлайненной функции и проверить, встроился ли там код всей функции, или же есть call на неё. Очевидно же :-)
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
17.09.2012, 01:01
bgm313, никак, в нем просто нет вызова этих функций, код просто встраивается в то место, где используется функция.

Добавлено через 2 минуты
В gcc есть ключ -finline-functions, который входит в флаг оптимизации O3.
0
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
17.09.2012, 01:08  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Посмотреть на место вызова заинлайненной функции и проверить, встроился ли там код всей функции, или же есть call на неё. Очевидно же :-)
Тогда получается, что у меня студия совсем не генерирует встроенный код?
Вот листинг:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
 
inline int f0(int r) {return 1;}
int f1(int);
 
inline int f2(int);
 
__forceinline int f3(int);
 
int main(){
    f0(2);
    f1(2);
    f2(3);
    f3(5);
 
    return 0;
}
 
 
 
int f1(int a){ return a + 1; }
 
int f2(int a){ return a + 2; }
 
int f3(int a){ return a + 3; }

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int main(){
004113A0  push        ebp  
004113A1  mov         ebp,esp  
004113A3  sub         esp,0C0h  
004113A9  push        ebx  
004113AA  push        esi  
004113AB  push        edi  
004113AC  lea         edi,[ebp-0C0h]  
004113B2  mov         ecx,30h  
004113B7  mov         eax,0CCCCCCCCh  
004113BC  rep stos    dword ptr es:[edi]  
    f0(2);
004113BE  push        2  
004113C0  call        f0 (4111CCh)  
004113C5  add         esp,4  
    f1(2);
004113C8  push        2  
004113CA  call        f1 (41108Ch)  
004113CF  add         esp,4  
    f2(3);
004113D2  push        3  
004113D4  call        f2 (41109Bh)  
004113D9  add         esp,4  
    f3(5);
004113DC  push        5  
004113DE  call        f3 (411096h)  
004113E3  add         esp,4  
 
    return 0;
004113E6  xor         eax,eax  
}
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
17.09.2012, 01:11
Цитата Сообщение от bgm313 Посмотреть сообщение
Тогда получается, что у меня студия совсем не генерирует встроенный код?
оптимизация включена? (яуж не помню как это варьируется в студии)
1
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
17.09.2012, 01:12
А у вас галочка включена? По умолчанию она не инлайнит вообще, даже то, что помечено. Или ключ /Ob1 (инлайнить при возможности только то, что помечено), или любой из оптимизационных (/O1, /O2, /Ox; они включают /Ob2 = инлайнить всё, что можно, даже если не помечено)
1
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
17.09.2012, 01:21
поудалял все
0
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
18.09.2012, 20:59  [ТС]
Во вкладке оптимизация, я нашёл где поставить галочку и изменил её.

Была:
Развёртывание подставляемых функции: по умолчанию
Сделал:Развёртывание подставляемых функции: Только __inline (/ob1)

Попытался скомпилировать код, выскочила ошибка:

error D8016: несовместимые параметры командной строки "/ZI" и "/Ob1"C:\...

Что такое параметр /Zi? С чем он связан? Как устранить error?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
18.09.2012, 21:15
/ZI = отладочная информация, позволяющая докомпилировать редактируемый в отладчике код на лету.

Выбираете что-то одно: или инлайн, или это. Искать где-то в соответствующей вкладке.
1
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
18.09.2012, 21:24  [ТС]
1.
Я нашёл где этот параметр. Он стоит по умолчанию, если меняю его то код вроде работает:
Вот список доступных вариантов:

-c7 совместимо(/z7)
-База данных программы (/Zi)
-База данных программы для операции "Изменить и продолжить" (/ZI)

Какой из вариантов наиболее оптимальный при использование inline функций?

2.Скомпилировал код с inline функциями. В диз. коде никаких call нет. Но и код функции туда не вставляется. Там почему-то просто пишется имя функции. Так и должно быть?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
18.09.2012, 21:32
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Какой из вариантов наиболее оптимальный при использование inline функций?
Никакой для release-версии, /ZI для отладки. (Или /Zi, там у /ZI есть немного противопоказаний.) Приобретение в скорости не важно при отладке, оно важно в релизной версии. А если код ломается, если что-то не инлайнить, то это плохо.

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
2.Скомпилировал код с inline функциями. В диз. коде никаких call нет. Но и код функции туда не вставляется. Там почему-то просто пишется имя функции. Так и должно быть?
Не знаю, может то дизассемблер студии помечает так место "сюда подставлен код такой-то функции".
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
18.09.2012, 21:35
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
может то дизассемблер
Скорей наоборот. Потому что, как мне всегда казалось, сначала создается код на asm, который потом компилируется в машинный.
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
18.09.2012, 21:39
Да нет, всё вам верно кажется. Просто я так обозвал эту штуку, которая показывает ассемблерный код вперемешку с соответствующими ему строками исходника.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2012, 21:39
Помогаю со студенческими работами здесь

inline
В хедере определён класс со static-методами, в исходнике реализация этих методов. Один из методов определяется с ключевым словом inline....

Inline функции.
Здравствуйте. Скажите пожалуйста, объявление функции как inline нужно делать как в прототипе так и в определении или достаточно только в...

Inline функции
Друзья!Инлайн функции могу быть определены только внтури класса?Или могут быть определены вне класса?Если вне,то как?Спасибо!

inline и define
Почему использовать inline-функции лучше, чем использовать команду препроцессора #define? Смысл в том, что лучше лишний раз не трогать...

Inline-метод
Как можно декларировать inline-метод класса не используя ключевое слово inline??


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru