Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343

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

03.05.2025, 18:18. Показов 11168. Ответов 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
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6280 / 3004 / 1051
Регистрация: 01.06.2021
Сообщений: 11,254
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
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,261
04.05.2025, 10:21
Лучший ответ Сообщение было отмечено Bogradan как решение

Решение

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

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

Добавлено через 4 минуты
Azathtot, inline нужен не для встраивания, а для возможности множественного определения глобальных объектов и функций. Товарисчу ТС пока что это не нужно, больше бед наделает
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6280 / 3004 / 1051
Регистрация: 01.06.2021
Сообщений: 11,254
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
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6280 / 3004 / 1051
Регистрация: 01.06.2021
Сообщений: 11,254
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
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,261
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
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru