Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510

Внешний define или нечто подобное

27.09.2024, 17:53. Показов 1242. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет
был изначально код
все в одном файле
в нем был некий
C++
1
#define something
потом часть кода была вынесена в другой файл.
и соответственно там дефайна нет
правильно ли будет сдублировать этот дефайн и в новом файле и последующих?
или лучше объявить это в стиле с++
как например const char
или const int ....
и далее через экстерны?

Добавлено через 54 секунды
как правильнее методологически это делать, и какие могут быть нехорошие последствия у каждого из способов?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.09.2024, 17:53
Ответы с готовыми решениями:

Как работает эта штука, и как сделать нечто подобное ?
Я хочу сделать такие же блоки с линиями Какой алгоритм тут используется чтобы в правильном порядке их обходить ? Добавлено через...

Как создать, нечто подобное файловой системе - из массивов?. Как? (сломал весь мозг)
Ребята, помогите пожалуйста. (устройство что-то типа файловой системы) вводные: Т.е. все как в проводнике, есть папочка, в ней можно...

Инфаметр или нечто подобное
Может кто знает что нибудь похожее на скрип сайта (infametr_ru или sprosimamu_ru) Мне важна следующая структура: на главной странице -...

11
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 18:19
Цитата Сообщение от pup_kin Посмотреть сообщение
правильно ли будет сдублировать этот дефайн и в новом файле и последующих?
Да.

Добавлено через 2 минуты
Цитата Сообщение от pup_kin Посмотреть сообщение
и какие могут быть нехорошие последствия
Если про #define, то с ним всегда всё плохо.
Например вы можете его переопределить, тот самый, но значение будет другим и последствия тоже.
Ещё стоит уточнить, в каких файлах находится этот дефайн, исходники или хидеры.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13179 / 6815 / 1821
Регистрация: 18.10.2014
Сообщений: 17,243
27.09.2024, 18:31
Цитата Сообщение от pup_kin Посмотреть сообщение
правильно ли будет сдублировать этот дефайн и в новом файле и последующих?
Нет, правильно будет обойтись без дублирования: вынести этот дефайн в отдельный файл настроек и включать этот файл везде.

Или, если это действительно глобальная настройка, альтернативным вариантом будет передавать ее через ключи компилятора, то есть указываться этот дефайн должен через средства сборки.

Цитата Сообщение от pup_kin Посмотреть сообщение
или лучше объявить это в стиле с++
как например const char
или const int ....
и далее через экстерны?
Так откуда же нам знать, возможно ли это вообще? "Средства С++" покрывают лишь малую долю возможностей #define.

Если можно, то лучше. (Неясно, при чем здесь только "экстерны").
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
27.09.2024, 19:44  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Если можно, то лучше. (Неясно, при чем здесь только "экстерны").
а как объявить несколько раз переменную в разных местах?
вроде как ключевое слово
"extern" Для этого и используется.

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
Ещё стоит уточнить, в каких файлах находится этот дефайн, исходники или хидеры.
а в чем разница когда в исходниках или в хидерах?
ну в принципе понятно что хидеры включаются.
я в данные момент вынес в хидер, потом что в два исходника тащить не хотелось.

Добавлено через 1 минуту
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"Средства С++" покрывают лишь малую долю возможностей #define.
а какие у #define есть возможности помимо собственно определения константного выражения, применительно к переменным?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 22:40
Цитата Сообщение от pup_kin Посмотреть сообщение
а какие у #define есть возможности помимо собственно определения константного выражения, применительно к переменным?
Дефайны не определяют никакие константы и никакие переменные. Это средство текстового препроцессора.
Он (препроцессор С++) работает непосредственно с текстом программы и ничего не знает ни про константы ни про С++ ни про что либо другое.
Когда ты это поймешь, всё станет понятно с дефайнами.

Более конкретно, они (define-s) могут принимать аргументы.

C++
1
2
3
4
5
6
#include <iostream>
int main(){
   #define max(a, b) (a > b ? a : b)
   int a = 5, b = 3; 
   std::cout << max(a, b);
}
Обзор : https://en.cppreference.com/w/cpp/preprocessor
Возможности замены : https://en.cppreference.com/w/... or/replace
0
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
27.09.2024, 23:04  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Он (препроцессор С++) работает непосредственно с текстом программы и ничего не знает ни про константы ни про С++ ни про что либо другое.
Когда ты это поймешь, всё станет понятно с дефайнами.
это понятно
просто подстановка
например можно задефайнить и писать на с++ как на 1С

и макросы и переменные передавать в эти конструкции можно
вот только пишут что в стиле с++
лучше использовать шаблоны вместо этого

и в целом у меня вопрос
даже мысль
что навеное директивы #
лучше использовать только там где нельзя обойтись средствами с++

НО возникает такая штука
что если задефйнил нечто
и потом заинклюдил это нечто
и использую далее в другом файле - то ошибки не будет,
потому что компилятор заменит все в момент инклюда.
а вот если я начну объявлять это все переменными

то придется каждый раз описывать эти переменные в каждом файле как extern.

Добавлено через 3 минуты
ан, нет .
инклюд все перекрыл

хорошим ли тоном является объявлять константы как константы , а не как дефайны?
по сути наверн вопроса нет.
вроде всё понятно

Добавлено через 3 минуты
но с дефайнами
можно реально передефайнить и никто даже не ругнется,
а если константными переменными пееропределить - то ругается.

безопаснее использовать переменные там где это возможно,
это я верно понял?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13179 / 6815 / 1821
Регистрация: 18.10.2014
Сообщений: 17,243
28.09.2024, 03:44
Цитата Сообщение от pup_kin Посмотреть сообщение
а как объявить несколько раз переменную в разных местах?
"Переменную"? В исходном вопросе не шло речи ни о каких переменных.

И что значит "а как еще"? А как "не еще"? А как вы собрались объявлять переменную при помощи #define?

Цитата Сообщение от pup_kin Посмотреть сообщение
а какие у #define есть возможности помимо собственно определения константного выражения, применительно к переменным?
Не понимаю вопроса. Сначала вы объясните, как вы собирались использовать #define для определения переменных. О чем речь вообще?
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
01.10.2024, 01:43  [ТС]
^)
ну я имел ввиду пересобрал я проект, вижу пины заняты, я переместил пин с 10 на 7
получается переменная, константная

так то понятно
ну всеже поняли , что имелось ввиду.
Взять любой проект там куча дефайнов, по факту все можно
const int|float|любойДругойТип и через запятую.
но почему то часто через define пишут простыню.
и ведь неизвестно в какой тип этот дефайн преобразуется.
Кстати могут ли быть какие-то проблемы с неверной интерпретацией компилятором текстовых значений?

Добавлено через 1 минуту
p/s/ пересобрал имеется ввиду не в среде разработки нажал "пересобрать"
а пересобрал физически , натыкал на макетке или спаял
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
01.10.2024, 02:13
Цитата Сообщение от pup_kin Посмотреть сообщение
и ведь неизвестно в какой тип этот дефайн преобразуется
Ещё раз, дефайны - директивы текстового препроцессора.
Он раскроется в том виде в котором был записан. Типы (включая литералы) определяет компилятор, не препроцессор.

Добавлено через 9 минут
Example :
In CPPInsights
in OnlineGDB
1
435 / 159 / 28
Регистрация: 12.12.2020
Сообщений: 1,269
01.10.2024, 02:19
Цитата Сообщение от pup_kin Посмотреть сообщение
ну я имел ввиду пересобрал я проект, вижу пины заняты, я переместил пин с 10 на 7
Ну это не переменная, в обычном смысле этого слова.
В таком варианте лучше создать отдельный файл pins.h например или hardware.h или как там по смыслу и там прописывать через дефайны пины. И везде где надо его подключать.

Но я обычно делаю (если речь про микроконтроллеры) отдельные файлы для работы с каждым блоком (uart, adc, power) и в их хидерах прописываю нужные пины. И при необходимости подключаю эти хедеры. Но, как правило, такой необходимости нет, так как вся работа с данным блоком только в этом файле.
Удобно потом забрать весь файл в другой проект, поменяв пины и пользовать.
0
01.10.2024, 08:54

Не по теме:

Цитата Сообщение от Alex1126 Посмотреть сообщение
Удобно потом забрать весь файл в другой проект, поменяв пины и пользовать
Я пришел к тому, что удобно такие файлы держать в отдельном репозитории и подключать его к каждому проекту. Чтобы при обнаружении ошибки исправить ее в одном месте, а не находить ее снова и снова в каждом проекте, куда этот файл был скопирован.

0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
01.10.2024, 15:54
Цитата Сообщение от pup_kin Посмотреть сообщение
Внешний define
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
передавать ее через ключи компилятора, то есть указываться этот дефайн должен через средства сборки
Это самый подходящий вариант для текущего вопроса и для практики.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.10.2024, 15:54
Помогаю со студенческими работами здесь

Как запускать asp.net web administration tool или нечто подобное не из среды VS
Уважаемые Гуру! Для авторизации в программе под winforms я использовал asp.net авторизацию (я использую mysql membership provider)....

ПО получило доступ к социальным сетям и гугл аккаунту. Подозреваю RAT или нечто подобное
Пытался установить кряк программы из ютуба, видео увидел вообще в комментариях в ВК. Был на 90% уверен что это вирус, но бес попутал. При...

Как организовать нечто подобное
Всем привет, тотально прошляпил верстку в универе, а теперь горит домашнее задание вот такого содержания: Реализовать игру при помощи...

Как зашифровать строки в нечто подобное
как зашифровать строки в нечто подобное: abcde== aBf/EHx= adgF8

Подскажите, как реализовать нечто подобное
Привет форумчане! На одном сайте, нашел очень не обычный конструктор, который меняет от размеров, до стиля одежды. Очень нужно...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru