@nyar_roller
Молодой, перспектиный Python Developer

Суть макросов в с++?

Я учусь на специальность "Компьютерная инженерия", где у нас есть предмет "Программирования", на котором мы учим язык С++. С программированием, как таковым знаком давно, в арсенале 4 года разработки на Python. С++ когда-то сам начинал учить.. писал простенькие программы, юзал, как язык в игровом движке.. На лабораторной у нас задание, в которое звучит примерно так: "Напишите макрос, который бы сортировал массив", либо "Макрос, который находит сумму чётных элементов массива".. ну и так далее... Пока это делал сто раз проклял автора задания, ибо чем больше когда я пишу, тем больше багов возникает.. Насколько я знаю, макросов вообще стараются по возможности избегать в С++, а если и приходиться использовать, то есть ряд правил, которые необходимо соблюдать для корректной работы. Вопрос, в каких случаях вообще использую макросы, и когда от них стоит отказаться и почему?
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Макроссы часто используют для условного включения каких-то функций на этапе компиляции. Например, отладочного логирования. Тогда в зависимости от ключей компиляции можно получить релизный исполняемый файл вообще без этого ненужного кода.

Еще макросы можно использовать для гарантирования инлайнинга кода. Если есть что-то часто повторяющееся, например, это же самое логирование, то можно сделать макросы и избегать дополнительных накладных расходов на вызовы функций.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@wonderingpeanut
При передаче какого-либо выражения в качестве аргумента функции, это выражение сначала приводится к какому-то значению, а значение уже передается функции.

Макросы позволяют не выполнять выражение, а передать его, как есть. Это полезно для создания отложенных функций, так называемых санков (thunk).

Это один из юзкейсов)

Второй юзкейс - упрощение синтаксиса. Или делание его более удобным для применения. Например тебе не удобно пользоваться if выражением. Скажем, постоянно путаешься, какой код выполняется в true блоке, а какой в false.

Берешь и создаешь макрос my-if в котором привычный синтаксис if expression true_clause else_clause превращаешь в допустим if expression then true_clause else false_clause
Ответ написан
@12rbah
макросов вообще стараются по возможности избегать в С++, а если и приходиться использовать, то есть ряд правил, которые необходимо соблюдать для корректной работы. Вопрос, в каких случаях вообще использую макросы, и когда от них стоит отказаться и почему?
Если говорить про ваше задание, то смысла 0, т.к. шаблоны могут успешно их заменить.
Такие вопросы тут уже задавали, поэтому можете почитать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы