#19. Директивы макропроцессора #define и #undef | Язык C для начинающих

preview_player
Показать описание


Что такое директивы и макропроцессор. Использование директивы define для задания простых макросов. Отмена определения макросов с помощью директивы undef.
Рекомендации по теме
Комментарии
Автор

Спасибо!!! Для себя почерпнул некоторые тонкости, лайк в поддержку канала за проделанную работу!!!

AlexRootx
Автор

Огромная благодарность за ваши труды! Очень нравится подача материала и глубокое объяснение. Многое становится понятным)))

АндрейАндреев-рхз
Автор

Наткнулся тут на коммент на Степике обо мне, мол, "видели бы вы, как он въезжает по курсу Балакирева...".
И в очередной раз я вспомнил ту ситуацию, как я засрал твой курс по ООП.
И в очередной раз у меня возник диссонанс: вот как человек, который так потрясающе объясняет теорию, мог там сделать такие...неочевидные - назовем их так - задачи, где основная сложность была не в решении, а в понимании того, что от меня хочет автор?
Ты ведь даже дескрипторы охрененно рассказал, но от задач я там конкретно бомбанул, да.
P.S. Ну а видос, как обычно, бомба - потрясающее повествование и разжовывание материала. Прям не устану лайки ставить, да.

IdE
Автор

Константы в С можно задавать также с помощью const
const int FIVE=5;
const int TEN=FIVE+FIVE;
x=TEN%2; //x=10%2 т.е. будет x=0
Компилятор в этом случае ВЫЧИСЛИТ значение выражения и свяжет имя константы с полученным результатом. Потом в тексте программы имя константы заменятся этим РЕЗУЛЬТАТОМ (для примера TEN заменится числом 10, а не 5+5). Но это для const. А #define ничего не вычисляет, а просто заменяет лексему на заданную строку текста.
Например, имеем фрагмент программы
#define FIVE 5
#define TEN FIVE+FIVE
...
x=TEN%2; // x=5+5%2 поэтому будет x=6, а не х=0
Проблемы можно избежать, если поставить скобки:
#define TEN (FIVE+FIVE)

olegkomlev
Автор

Чем-то напоминает использование глобальных переменных в Python

AlexandrKalinovsky
Автор

\ это не слэш, а обратный слэш (backslash). Стоило ещё упомянуть про необходимость обрамление тела вычисляемых макросов в круглые скобки, к примеру sizeof TEN, из видео, будет вычисляться не так как задумывалось, из за их отсутствия. И про вдумчивое использование макросов, т.к. ошибки в них трудно вычисляемы. Но возможно это ещё будет рассказано в дальнейших видео, тема макросов явно только начата.🙂

weerbox
Автор

Получается в макросе можно написать полноценную функцию и потом использовать ее в программе.

ГубкаБоб-ръ
Автор

Любите вы программисты запутывать свой код.

chinarulit
Автор

А что вот такая фигня значит ?
#define PREDICT(opname) ((void)0)

mantrida
Автор

А какой смысл, если определили:
# define TEN 2 * FIVE
и отменяем:
# undef TEN
опять определили:
#define TEN 10

Какой в этом смысл? При выполнении программы TEN == 10.
Для чего тогда первое определение, если его отменили?

АндрейИванов-еот
Автор

как то криво ваш препроцессор обработал директиву define TEXT2 он должен склеить этот перенос и не добавлять косую черту.

Hippan_