@kolomiec_artiom

Для чего нужны директивы препроцессора на языке С и С++?

Добрый день!

Для чего нужны директивы препроцессора на языке С и С++? Я понимаю, что #include необходим для подключения библиотек. Но вот зачем, допустим, нужен #define не понимаю. В чем его преимущество в сравнении с обычным объявлением переменных, функций? У меня есть предположение, что будет выигрыш в скорости компиляции и затратах памяти, но я в этом пока сильно сомневаюсь

Спасибо за ответ.
  • Вопрос задан
  • 883 просмотра
Решения вопроса 1
Zoominger
@Zoominger
System Integrator
Лень печатать, почитайте сами:
5d85f85fd3f76981179317.png
5d85f89945186944026071.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gecube
@gecube
системный администратор, программист... все дела..
О, это сложно объяснить. Но кратко - Си в изначальном варианте не поддерживал условную компиляцию. Ты не мог написать один файл, который компилировался на любой поддерживаемой платформе одинаково. Пришлось бы держать отдельную копию исходного файла под каждую целевую платформу. Поэтому возникла идея языка шаблонов или точнее - метапрограммирования, что реализуется препроцессором Си. Он берет исходный файл и по определённым правилам согласно своих директив превращает его в то, что пойдет на вход компилятору. И директива `#include` позволила подключать библиотеки кодов. А потом препроцессор исторически перекочевал в С++ из необходимости обеспечения совместимости.

Сейчас в современном С++ иногда приходится прибегать к этой магии макросов, например, при написании переносимого кода, если не хватает штатного функционала языка - шаблонов, рефлексии и пр. Но при прочих равных активное использование макросов считается не очень хорошим тоном, т.к. вменяемых средств их отладки нет и сообщения об ошибках могут быть весьма запутанными.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы