В своей книге "Дизайн и эволюция языка С++" Бьярни Страуструп писал:
"...Я поставил себе целью изжить Cpp [препроцессор С++]. Но задача оказалась труднее, чем представлялось вначале. Сpp, возможно, и неудачен, но трудно найти ему лучше структурированную и более эффективную замену".
Программистам на С++ и сегодня приходится иметь дело с потенциально опасным механизмом препроцессирования, который может приводить к глобальным заменам во всей программе и от действия которого невозможно защититься структурным образом.
В C# эта проблема решена кардинальным образом. Препроцессор стал частью компилятора (т.е. перестал быть препроцессором в традиционном понимании этого слова), а из привычного набора макросов оставлены только следующие:
В следующем примере мы продемонстрируем использование всех перечисленных выше механизмов препроцессора:
#define DEBUG
#if DEBUG && DEMO #error You cannot build a debug demo version
class Demo { public static void Main() { #if DEBUG Console.WriteLine("Starting the program... "); #endif } }