Еще одно отличие препроцессора gcc от препроцессора MS VS cl. Рассмотрим следующий фрагмент:
# define A(x) L ## x
# define B A("b")
# define C(x) x
C(A("a" B))
Для 'gcc -E' мы получаем следующее:
L"a" A("b")
Для 'cl /E' вывод отличается:
L"a" L"b"
Препроцессор MS каким-то образом выполняет дополнительное раскрытие макроса. Алгоритм его работы явно отличается от gcc, но и этот алгоритм, похоже, является секретом. Кто-нибудь знает, чем можно объяснить наблюдаемую разницу и какова схема препроцессинга в MS cl?