Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343

Альтернатива или замена "#define"

03.05.2025, 18:18. Показов 11312. Ответов 35

Студворк — интернет-сервис помощи студентам
У некоторых начинающих в с++ в интернете возникают вопросы как заменить #define чтобы не писать тонну define строк в программе.
Это очень просто, замены не существует на самом деле. Нужно просто добавить отдельную подпрограмму только для ресурсов, туда можно вписать любые мешающие алгоритмы как define, любые. Обязательно подключить библиотеку подпрограммы например как у меня include "define.cpp".
Таким образом вы создаёте свою личную библиотеку на которую ссылаетесь в основной программе, с любыми define и вообще любыми не удобными для вас алгоритмами.
Если вы новичок таким образом это как один из вариантов очень легко программировать любые сокращения массы алгоритмов.
Пример:
C++
1
2
3
4
5
6
7
8
#define d window.draw
#define P .setPosition
#define S .setScale
#define t const Texture
#define ss Sprite
#define k if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::
 
//#define со случайным кодом которые мешают основной программе.
Миниатюры
Альтернатива или замена "#define"   Альтернатива или замена "#define"   Альтернатива или замена "#define"  

Альтернатива или замена "#define"  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2025, 18:18
Ответы с готовыми решениями:

Есть ли замена функциям как, например, define?
Недавно из прочитанной статьи о директивах препроцессора define узнал, что ее (define) можно...

Как происходит замена значений в #define?
Не понятно как происходит замена значений в #define, и почему на выходе 11? #include <iostream>...

Как #define MB_OK присвоить клик ЛКМ или движение курсора?
Как #define MB_OK присвоить клик ЛКМ или движение курсора????

35
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
03.05.2025, 20:06  [ТС]
Студворк — интернет-сервис помощи студентам
Если писать всё по 1000 раз каждый алгоритм в каждом месте без ссылок почти, оптимизация видеоигры будет лучше или хуже?
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
03.05.2025, 20:26
Цитата Сообщение от Bogradan Посмотреть сообщение
оптимизация видеоигры будет лучше или хуже
ты преждевременно думаешь об оптимизации, брось эту сомнительную затею с макросами. Пиши чистый и понятный код
1
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
03.05.2025, 20:38
Цитата Сообщение от Bogradan Посмотреть сообщение
Если писать всё по 1000 раз каждый алгоритм в каждом месте без ссылок почти
а зачем? вам вероисповедание запрещает слово inline использовать? И алгоритм алгоритму рознь... есть такие, для который "накладные расходы" в виде упаковки параметров, вызова функции/метода и возврата ерунда на общем фоне..
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
04.05.2025, 00:39
Человек ещё не знает, в какую черную дыру он может попасть с этими #define

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
Пиши чистый и понятный код
А может он обфусцирует "на лету" =)

Добавлено через 2 минуты
Цитата Сообщение от Bogradan Посмотреть сообщение
чем больше кода повторяющегося уберу тем лучше
Так фишка с макросами в том, что ты не убираешь повторяющийся код, ты его множишь на 100500 =)
1
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
04.05.2025, 09:30  [ТС]
Спасибо. Попробую использовать typedef и inline. Только не пойму как другую команду в них засунуть с изменяемыми переменными, не уверен что они это вообще могут
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
04.05.2025, 10:10
Цитата Сообщение от Bogradan Посмотреть сообщение
Только не пойму как другую команду в них засунуть с изменяемыми переменными
А зачем из "засовывать"? inline та же функция, только которая не вызывается, а разворачивается в месте вызова. Т.е. оформление вызова/возврата отсутствует. Оправдана, для 3-4 строчных простых операций. Если в теле идут ощутимые вычисления, то inline бессмысленнен.
И да, не хотие что ли основы С++ подтянуть, что бы глупые вопросы не задавать про "команды"..
1
фрилансер
 Аватар для Алексей1153
6498 / 5729 / 1133
Регистрация: 11.10.2019
Сообщений: 15,300
04.05.2025, 10:21
Лучший ответ Сообщение было отмечено Bogradan как решение

Решение

Bogradan, вместо typedef нужно использовать using

а inline пока что явно не используй

Добавлено через 4 минуты
Azathtot, inline нужен не для встраивания, а для возможности множественного определения глобальных объектов и функций. Товарисчу ТС пока что это не нужно, больше бед наделает
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
04.05.2025, 10:25
Алексей1153, согласен. Inline использовался для встраивания при царе горохе, сейчас оптимизация компилятора все четко делает.
1
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
04.05.2025, 10:48  [ТС]
Я вместо define научился делать тоже самое с typedef. Спасибо за то что объяснили как правильно. Наконец то я умею делать с классами что угодно и вертеть их как хочу. Define не буду использовать больше.

C++
1
2
3
4
5
 //SFML code
typedef const Texture tg(float nt);
int main() {
string tg = "res\\btn1.jpg";
}
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
04.05.2025, 10:50
Цитата Сообщение от Bogradan Посмотреть сообщение
научился делать тоже самое с typedef.
typedef вы используете если пишите на Pure C. В С++ есть using
1
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
04.05.2025, 10:59  [ТС]
Какая разница если Pure C встроен в С++. Ну хорошо, попробовал using тоже работает.
C++
1
2
3
4
5
6
//sfml
using t = const Texture;
int main() {
 
    t t1("res\\btn1.jpg"); Sprite s1(t1);
}
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
04.05.2025, 13:07
Лучший ответ Сообщение было отмечено Bogradan как решение

Решение

Цитата Сообщение от Bogradan Посмотреть сообщение
Какая разница
грубо говоря, начиная с С++11 using может делать все то же самое, что typedef, а вот typedef не может делать все то же самое, что using. Особенно, что касается современного С++, STL и прочего, в частности шаблонов. В современном С++ предпочтительнее использовать using.
1
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
04.05.2025, 13:39
Цитата Сообщение от Bogradan Посмотреть сообщение
Ну хорошо, попробовал using тоже работает.
А вот за такое надо по морде чайником. Причем по морде чайником будете вы сами себя где-то через полгода, как вернетесь к этом коду.
Я понимаю сократить
std::map<std::string,std::unorderd_set<s td::vector<MyType>>> до допустим map_of_typed_set_t но сокращать Texture до t это ССЗБ.
1
фрилансер
 Аватар для Алексей1153
6498 / 5729 / 1133
Регистрация: 11.10.2019
Сообщений: 15,300
04.05.2025, 13:43
Bogradan,

C++
1
2
3
4
int main()
{
    Sprite s1("res\\btn1.jpg");
}
1
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83
22.06.2025, 15:29
Цитата Сообщение от SmallEvil Посмотреть сообщение
Человек ещё не знает, в какую черную дыру он может попасть с этими #define
Анука. Хочу реальный пример чёрной дыры при использовании define. Сумеешь убедить меня что define зло?
0
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
13.07.2025, 00:45  [ТС]
Да, это очень плохо define использовать, не делайте так никогда, typedef и using использую хорошо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2025, 00:45

Что лучше использовать, #define или typedef?
Вот привожу пример программы. Здесь можно и с #define сделать и с typedef. Программа в любом...

define внутри функции или класса
Здравствуйте, Подскажите пожалуйста, а можно ли использовать define только внутри функции или...

Внешний define или нечто подобное
всем привет был изначально код все в одном файле в нем был некий #define something ...

Ввод формул с Edit или альтернатива
В общем нужно считать формулу с Edit, или может есть какие-то иные способы/классы для ввода...

Кириллица в openGL (glut, freeglut) или (!) альтернатива
Ребят уже целый вечер гуглю. Недельку назад начал плотно изучать C++. С графикой вообще интересно,...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Опции темы

Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru