|
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
|
|
Зачем нужен inline06.10.2009, 23:36. Показов 47311. Ответов 31
Скажите пожалуйста, зачем нужна команда inline? Изучаю классы, и там говорится мимолётом, что эта функция повысит эффективность, но так и не понял зачем она нужна. Желательно пример с комментарием. Зараннее благодраю за скорый ответ.
0
|
|
| 06.10.2009, 23:36 | |
|
Ответы с готовыми решениями:
31
Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline? inline функции vs инструкции inline функций
|
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 06.10.2009, 23:42 | |
|
завидев такую конструкцию, компилятор может встроить тело функции немостредственно в точку вызова. таким образом код распухает, но за счёт отказа от вызова функции может работать быстрее
1
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 06.10.2009, 23:42 | |
|
Компилятор просто заменяет вызов функции, кодом самой функции. Это чаще всего применяется для маленьких по размеру функций. Компилятор, все равно, сам решит инлайнить функцию или нет. А зачем пример? Самое обычное объявление функции, просто с ключевым словом inline и все.
1
|
|
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 06.10.2009, 23:45 | |
|
Syltan, инлайн функция перемалывается компилятором так,что фактического вызова не происходит,ее код "копируется" туда,откуда она вызвана. Для часто вызываемых,но очень коротких функций, inline выгодно указывать,для остальных не принципиально. Надо сказать,что современные компиляторы плевать хотели на указание директивы инлайн, т.е посчитав,что это не выгодно,они проигнорируют желание программера. Выглядит это примерно так : "Слушай,компилятор,вот эту бы функцию хорошо бы встраивать.."... "Молчать,человечишко,мне виднее" - отвечает ему компилятор. Теоретически, после этого программер может обидеться и сказать "__forceinline",после чего железке останется только повиноваться(если это возможно). Это поведение актуально для Visual Studio. Старенький борланд си вряд ли решится спорить,но тут уж я не могу утверждать. Подробнее про поведение компилятора нужно читать в его справке. Для вижуал студии читать тут
5
|
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 06.10.2009, 23:47 | |
|
Обрати внимание только, что inline - это не приказ, а нижайшая просьба к компилятору: "Милостивый государь, будьте так любезны, попытайтесь заинлайнить эту функцию, пожалуйста." - каковую просьбу компилятор может выполнить, а может и проигнорировать. Поэтому рассчитывать на то, что функция будет обязательно заинлайнена, нельзя. Как карта ляжет.
1
|
|
|
|
|
| 07.10.2009, 00:16 | |
Сообщение было отмечено как решение
Решение
На самом деле смысл модификатора не только в том, что это типа просьба проинлайнить функцию. Этот модификатор переводит функцию в разряд так называемых multiply defined. Технически символ для этой функции становится weak'ом. Если по простому, то функцию с модификатором inline можно помещать в файл *.h. Даже если функция не будет проинлайнена, то множественное её определение в разных модулях компиляции не вызовет слома при линковке.
Причём в стандартном Си этого модификатора нет, только в Си++, Си99, GNU C. Причём во всех языках работа с модификаторм идёт по разному. Когда-то с этим вопросом пришлось поразбираться, если завтра не забуду - на работе записано должно быть
13
|
|
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 07.10.2009, 00:38 | |
|
1
|
|
|
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
|
||||||
| 07.10.2009, 13:16 [ТС] | ||||||
0
|
||||||
|
|
||
| 07.10.2009, 13:44 | ||
|
1
|
||
|
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
|
|
| 07.10.2009, 13:46 [ТС] | |
|
Хорошо,скажите что такое weak и всё?
0
|
|
|
|
|||||||||||||||||||||||||||||||||||||
| 07.10.2009, 14:08 | |||||||||||||||||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
======================================== ================== Пример. Сделать быстрый интферфейс для вычисления квадрата числа На Си этот вариант выглядел бы так:
Вышеописанный вариант SQR в виде inline-функции более правильно делать в виде шаблона, чтобы так же как и макрос работало для произвольных типов. Но я просто привёл пример для демонстрации того, как этим пользоваться. Надо заметить, что техническая реализация инстанциации шаблонной функции в компиляторе выполняется точно так же, как и для функции с модификатором inline, именно поэтому не возникает конфликтов при линковке
13
|
|||||||||||||||||||||||||||||||||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 07.10.2009, 15:17 | |
|
Для декларирования weak символов есть специальные на то конструкции. Использовать для этого inline неправильно.
0
|
|
|
|
||
| 07.10.2009, 16:44 | ||
|
0
|
||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 07.10.2009, 16:46 | |
|
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 07.10.2009, 17:12 | |
|
Evg, я считаю ты, как раз, не должным образом написал.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||
| 07.10.2009, 17:34 | ||
|
0
|
||
|
|
||
| 07.10.2009, 18:06 | ||
|
Принципиальное отличие при наличия модификатора я описал. Что там написано не должным образом - я не знаю, этот посыл ты объяснять не возжелал. Дальнейший разговор больше смахивает на детский сад и неконструктивный флуд
2
|
||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 07.10.2009, 22:36 | |
|
Evg очень хорошо все описал.
0
|
|
| 07.10.2009, 22:36 | |
|
Помогаю со студенческими работами здесь
20
зачем нужен параметр Зачем нужен полиморфизм Зачем нужен malloc?
Зачем нужен extern? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|