Да, с точки зрения стандарта языка комментарии обрабатываются (заменяются пробелами) до препроцессора.
В практических реализациях обработка комментариев может выполняться тем же кодом (например, тем же исполняемым файлом), который обрабатывает директивы препроцессора и выполняет подстановку макросов, но результат должен быть тем же: комментарии не влияют на собственно препроцессор.
В старом и/или нестандартном коде иногда можно увидеть некоторые приемы, основанные на нестандартном поведении, включающем комментарии, специфичные для реализации, и отношения препроцессора, например, создание комментариев с использованием директив препроцессора.
#define CONCAT(a, b) a##b
#define BEGIN_COMMENT CONCAT(/, *)
#define END_COMMENT CONCAT(*, /)
BEGIN_COMMENT
This code is supposedly commented-out
END_COMMENT
или использование комментариев для конкатенации на уровне препроцессора (с компиляторами C, которые не поддерживают оператор ##
в определениях макросов)
#define OLD_CONCAT(a, b) a/**/b
Ни один из таких трюков не является допустимым в стандарте C. Ни один из них не работает.
person
AnT
schedule
05.01.2010