Еще одно отличие препроцессора gcc от MS

Еще одно отличие препроцессора 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?

9
задан Brian Tompsett - 汤莱恩 17 April 2016 в 17:50
поделиться