2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
|
||||||
1 | ||||||
#define: макросы12.08.2017, 20:28. Показов 1421. Ответов 31
Метки нет (Все метки)
Доброго времени суток.
Веду разбирательство с директивами препроцессора и тут возник вопрос в чем смысл использования макросов, если те же самые действия можно прописать в теле программы или прибегнуть к использованию функции? Я написал код с использованием макроса и по мне гораздо проще не прибегая к его использованию.Прошу объяснить каким-нибудь простым конкретным примером ,если можно....
0
|
12.08.2017, 20:28 | |
Ответы с готовыми решениями:
31
Как реализовать директиву #define для создания шаблона отпределения #define ? #define #define и const Идентификатор в #define |
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
|
|
12.08.2017, 20:32 | 2 |
лучше б вы макросом указали размер массива,а также в других местах где встречается это магическое число 10
1
|
Заклинатель змей
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,604
|
|
12.08.2017, 20:40 | 3 |
Roman2947, макросы встраиваются в код препроцессором и встроенный код работает намного быстрее, чем вызов функции с передачей управления. Но макросы увеличивают вес кода и не совсем безопасны (препроцессор не проверят типы переданных данных). В С++ существует более удачное решение -- inline-функции
2
|
41 / 41 / 16
Регистрация: 29.12.2016
Сообщений: 291
|
|
12.08.2017, 20:41 | 4 |
Roman2947, Когда код занимает несколько тысяч или десятков тысяч строк, не удобно весь листать и например менять размер массива, проще написать #define SIZE 10, а в коде допустим array[SIZE], ну и соответственно изменив в одном месте программы размер массива, он изменится во всей программе. Просто для удобства.
0
|
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
|
||||||
12.08.2017, 20:53 [ТС] | 5 | |||||
LightProger, LFC, почему Вы #define SIZE 10 относите к макросам?это разве не символические константы? я с Вами абсолютно согласен, что лучше использовать подобный метод, но меня больше озадачил пока макрос
0
|
Заклинатель змей
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,604
|
|
12.08.2017, 20:59 | 6 |
Roman2947, можете использовать хоть везде, если уверенны, что всегда передаёте те типы, для которых используемые операторы определены, и если размер готового исполнимого файла не имеет значения
0
|
41 / 41 / 16
Регистрация: 29.12.2016
Сообщений: 291
|
|
12.08.2017, 21:00 | 7 |
Roman2947, Про макросы можете почитать здесь: https://learnc.info/c/macros.html
0
|
12.08.2017, 21:04 | 8 |
https://www.cyberforum.ru/blogs/18334/blog100.html раздел "8. Примеры использования препроцессорных директив на практике"
Ещё тут: Тонкости языка С,define Дизайн и эволюция: перегрузка макросов Непростой препроцессор А вообще у макросов довольно широкое применение, но это сложно пояснить начинающему. Примерно так же начинающему сложно понять, зачем нужны указатели, когда код (по мнению вышеобозначенного начинающего) можно написать и без них. При появлении более серьёзного опыта программирования понимание многих вещей придёт само собой. Можно было бы, например, послать смотреть исходники мультиархитектурных вещей типа ядра linux или glibc, но самостоятельно копаться в этих софтах (точнее, в тех местах, где много технических приёмов, построенных на макросах), довольно сложно
2
|
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
|
|
12.08.2017, 21:04 [ТС] | 9 |
LightProger, с первых строк уже понял к чему Вы)) Я рассуждаю исходя из учебника, по которому я занимаюсь)так там четко разделено #define: символические константы и #define: макросы. Даже и не знаю кому верить)))Может меня ввели в заблуждение и поэтому я до сих не программист
0
|
12.08.2017, 21:08 | 10 |
К сожалению, некоторые афторы учебников сами толком не понимают того, о чём рассказывают другим. Иногда галиматья получается из-за того, что с другого языка переводил человек, который не особенно понимает, о чём идёт речь
2
|
41 / 41 / 16
Регистрация: 29.12.2016
Сообщений: 291
|
|
12.08.2017, 21:09 | 11 |
Roman2947, В некоторых учебниках неправильный перевод с английского языка. Часто встречаются опечатки и ошибки, лучше спросить на форуме, у знающих людей, если не понятно. Я конечно, к таким пока не отношусь, тоже начинающий.
0
|
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
|
|
12.08.2017, 21:11 [ТС] | 12 |
Evg, Вы говорите про более серьезный опыт, так каким образом его набраться) вот буквально на днях изучил свой учебник, сейчас сижу и думаю что делать дальше,думаю начать все с начала и заполнить все свои пробелы, которые образовались в первой половине изучения так как когда я его открыл понятия не имел о чем речь.... просто,читал,читал ,читал)
0
|
41 / 41 / 16
Регистрация: 29.12.2016
Сообщений: 291
|
|
12.08.2017, 21:14 | 13 |
Как набраться? Решать задачи, писать код, опыт сам и придет. Раз прочитали литературу для начинающего, ищите другую, уже для профессионалов, изучайте. Я вот сегодня закончил курс "Основы программирования на языке Си", и сразу записался на другой, "Программирование в стандарте POSIX", и "Язык программирования С"-более развернутый курс, также читаю книги, решаю задачи, смотрю видео на ютубе.
0
|
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
|
|
12.08.2017, 21:17 [ТС] | 14 |
LightProger, Возможно и этому есть место.Но тем не менее я доволен книгой по которой занимаюсь...не думаю что там все плохо в плане перевода..
Добавлено через 2 минуты LightProger, кстати по поводу задач, что можете посоветовать, какие источники?
0
|
41 / 41 / 16
Регистрация: 29.12.2016
Сообщений: 291
|
|
12.08.2017, 21:20 | 15 |
Наберите в поиске Задачи по языку Си, там их тьма. У меня еще наставник есть, он меня задачами снабжает.
0
|
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
|
|
12.08.2017, 21:23 [ТС] | 16 |
LightProger, Наставник-это огромный бонус...повезло)
0
|
41 / 41 / 16
Регистрация: 29.12.2016
Сообщений: 291
|
|
12.08.2017, 21:27 | 17 |
Да, на одном из форумов познакомились, напросился в ученики, человек согласился, я тогда язык JAVA, изучал, он меня переубедил сначала Си изучить, а его производные потом пойдут сами собой. Уже несколько месяцев занимаемся онлайн.
0
|
12.08.2017, 21:31 | 18 |
Элементарно: придумать себе задачу и реализовать её. Удобнее всего писать какие-нибудь примитивные игрушки. Пусть они никому не нужны, но опыта они принесут. А книги читать только тогда, когда появится реальная необходимость. И только те разделы, в которых появилась реальная необходимость. А взять книгу и попытаться её прочитать от начала и до конца - довольно бестолковое и бесполезное занятие
Ну и к слову, макросы, это далеко не та вещь, которую жизненно необходимо понимать начинающему Добавлено через 2 минуты В качестве задачи, с виду кажущейся неподъёмной, можешь почитать тут: Пишем свой интерпретатор языка BASIC. Да, осилить столько чужого диалога будет не просто. Но уверяю тебя, почерпнуть там опыта можно намного больше, чем тупо читая книги по языку программирования
1
|
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
|
|
12.08.2017, 21:33 [ТС] | 19 |
LightProger, Надо искать кому напроситься в поддаваны)))реально порой бывает такой стопор, что хочется все бросить....но проходит буквально день и руки сами тянутся кодить....это уже похоже на зависимость...Был бы кто подскажет или направит было бы гораздо проще и продуктивнее...
1
|
41 / 41 / 16
Регистрация: 29.12.2016
Сообщений: 291
|
|
12.08.2017, 21:37 | 20 |
)))) Это точно, я себе сделал расписание, один вечер поcвящаю изучению Linux, следующий вечер изучению языка Си, и так по порядку, надо еще английский подтянуть, но времени не хватает.
0
|
12.08.2017, 21:37 | |
12.08.2017, 21:37 | |
Помогаю со студенческими работами здесь
20
Массив, константы и #define #define - что это? Как пользоваться #define Некорректно работает #define Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |