Nov 12, 2010 22:48
Внезапно наткнулся на то, что символ \ (backslash) в C++ является line-continuation symbol, причем даже под комментарием.
Т.е.
someVariable = \
someValue;
эквивалентно
someVariable = someValue;
А в случае
doingSomething(); // witty comment with a strange lonely \
importantUncommentedString();
вторая строчка уедет в коммент и не сработает.
Из замеченных интересных свойств - работает, само собой, только в конце строки. Если после него стоит пробел и конец строки - не работает. Также позволяет бить идентификаторы на части, но разделители (например, выделяющие) в начале строки интерпретирует понятным образом - как разделители. Yummy.
Это я к тому, что задача "автоматически убрать из корректной программы на C++ все комментарии" несколько подлее, чем кажется. На счету бэкслеша к тому же еще и управляющие символы в строковых константах.
string correctStringConstantContainingADoubleQuoteSymbol = "\"";
P.S.
const char backSlashChar = '\
\
\\'; // yes!
math&prog