Следующий макрос препроцессора:
#define _VARIANT_BOOL /##/
на самом деле недействителен C; грубо говоря, причина в том, что препроцессор определен как работающий с потоком токенов, тогда как вышеприведенное предполагает, что он работает с потоком символов.
С другой стороны, к сожалению, приведенное выше на самом деле происходит в заголовочном файле Microsoft, поэтому мне все равно приходится с этим справляться. (Я работаю над реализацией препроцессора.)
С какими другими случаями люди сталкивались в дикой природе, будь то в унаследованном коде, каким бы старым он ни был, пока этот код все еще используется, с макросами препроцессора, которые на самом деле недействительны, но все равно работают, потому что они были написаны для компиляторов, которые используют символ ориентированная реализация препроцессора?
(Обоснование: я пытаюсь заранее понять, сколько особых случаев мне придется взломать, если я напишу правильную чистую, соответствующую стандарту реализацию, ориентированную на токен.)
//
не является допустимымpp-token
? - person caf   schedule 16.10.2011