Век живи...

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

Previous post Next post
Up