@kolomiec_artiom

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

Добрый день!

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

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

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

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

Войти через центр авторизации
Похожие вопросы