|
6 / 10 / 0
Регистрация: 29.06.2018
Сообщений: 60
|
|
В чём разница между макросом и подпрограммой?07.07.2018, 13:33. Показов 4895. Ответов 6
Подпрограмма, насколько я понимаю - это блок команд, выполняющий какую-нибудь крупную операцию, при этом он вызывается оттуда, где записан. Про макрос читаю, что это то же самое - тот же блок команд, тоже вызываемый со стороны. В чём тут различие, если оно есть?
0
|
|
| 07.07.2018, 13:33 | |
|
Ответы с готовыми решениями:
6
В чем разница между [] и * ? В чём разница между .each() и $.each() |
|
|
|
| 07.07.2018, 22:16 | |
|
Вопрос терминологический. Могут быть разные системы понятий.
В более высокоуровневых языках понятие подпрограммы тесно связано с понятием процедуры, в частности, свойствами подпрограммы являются: 1. наличие имени 2. наличие способа динамического (т.е. в рантайме) вызова. 3. наличие параметров. 4. наличие специальных механизмов возврата (преждевременный return, всякие там throw и т.п.) от процедур подпрограммы обычно отличаются более бедными механизмами передачи аргументов. А ещё я не знаю систем, где подпрограммы были бы анонимными (п.1). Макросами в некоторых средах (скажем, С) называются куски кода, которые встраиваются по месту использование макроса во время компиляции (отличие в п.2 предыдущего списка). Также макросы не используют специальные механизмы возврата (п.4). При этом они обладают именем и могут содержать параметры, впрочем, способ передачи аргументов у макросов и подпрограмм отличаются в следствии того, что один из них вызывается статически, а другой динамически. В других системах макросы и подпрограммы синонимы.
1
|
|
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
| 08.07.2018, 17:18 | |
Сообщение было отмечено Рауль Вулкан как решение
Решение
Если коротко, то макрос - это подстановка в текст программы при компиляции. При компиляции в каждое место исходника, где употреблен макрос будет вставлена последовательность операторов, что указана в теле определения макроса. Если макрос использован 100 раз, то последовательность операторов будет 100 раз вставлена и 100 раз окажется в откомпилированном коде. А если 100 раз использована подпрограмма, то последовательность операторов ее тела окажется в коде лишь 1 раз. Зато 100 раз будут вставлены в код вызовы этой подпрограммы. Если у подпрограммы нет параметров, то вызов подпрограммы - это одна инструкция процессора. А сама подпрограмма может иметь хоть миллион инструкций.
2
|
|
|
6 / 10 / 0
Регистрация: 29.06.2018
Сообщений: 60
|
||
| 09.07.2018, 08:01 [ТС] | ||
|
0
|
||
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
|||||||
| 10.07.2018, 09:39 | |||||||
|
Вызов подпрограммы требует некоторых накладных расходов на сам вызов, плюс выделение памяти на переменные. Думаю, использование макросов оправданно когда у нас есть небольшие почти похожие куски кода, которые должны работать достаточно быстро. Тогда и читаемость сохраняется, и производительность не будет сильно страдать. Вот, например, мне понравился кусок кода из видео кодека X264, спойлер
Используют макрос выполняющий одномерное целочисленное дискретное косинусное преобразования для выполнения двумерного ДКП. При этом, как видите, точки хода/выхода данных также задаются макросами. https://github.com/mirror/x264... dct.c#L330
1
|
|||||||
|
6 / 10 / 0
Регистрация: 29.06.2018
Сообщений: 60
|
||
| 10.07.2018, 18:56 [ТС] | ||
|
0
|
||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||
| 10.07.2018, 21:46 | ||
|
Большие по размерам подпрограммы макросами не оформляют, потому-что ты больше проиграешь на подсосе разбухшего кода в кеш процессора, чем выиграешь. Тут как-бы требуется чувство меры.
2
|
||
| 10.07.2018, 21:46 | |
|
Помогаю со студенческими работами здесь
7
В чем разница между С и С++ В чем разница между \n и \r
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|