Технически выражение препроцессора не совсем __WORDSIZE == 64
;но, скорее, он производится из этих токенов.Перед построением фактического выражения токены в выражении сканируются;происходит расширение макроса.Это своего рода точка зрения;Вы хотите проверить, равен ли определенный макрос __WORDSIZE
64.
Если окажется, что __WORDSIZE
это не , развернутый во время этого сканирования, тогда вы получите __WORDSIZE == 64
в качестве выражения;в этом конкретном случае все оставшиеся идентификаторы обрабатываются как 0
перед вычислением ... что означает, что вы оцениваете выражение 0 == 64
, которое является ложным.
Но в вашем случае вы определяетеобъект типа макроса __WORDSIZE
с пустым списком замен.Поэтому после расширения вы просто получаете: == 64
.Первый токен ==
, но это должен быть бинарный оператор.Это неверно;т. е. ваш invalid token at start of a preprocessor expression
равен ==
.