Как уже упоминалось, теги с префиксом # являются директивами препроцессора, что приводит к модификации кода, который будет скомпилирован. Более конкретно, приведенный вами пример относится к условной компиляции. Обычный вариант использования будет относиться к компиляции в режиме DEBUG или RELEASE, где препроцессор будет включать или исключать выбранный код следующим образом:
#define DEBUG
#ifdef DEBUG
// block of codes goes here - only survives preprocessing if in DEBUG mode
#endif
В этом случае код может регистрировать выходное сообщение или выполнять какие-либо другие действия, которые вы хотели бы выполнять только в режиме отладки. Если вы хотите скомпилировать в режиме DEBUG, вы определяете DEBUG; в противном случае вы просто закомментируете это. В качестве альтернативы, определение DEBUG может быть выполнено с переключателем компилятора. Дальнейшее обсуждение этого и использование препроцессора для условной компиляции в режиме отладки в целом см. В вопросе 987637 / define-debug-1 .