Ошибка компилятора Clang: неверный токен при запуске выражения препроцессора - PullRequest
0 голосов
/ 07 декабря 2018

при использовании компилятора clang в Windows выдает «недопустимый токен при запуске выражения препроцессора»

#if __WORDSIZE == 64

. / Bits / types.h: 42: 16: error: недопустимый токен при запуске выражения препроцессора

Чтобы убедиться, что __WORDSIZE определен, я добавил

#define __WORDSIZE

, который выдает предупреждение ./bits/wordsize.h:8:9: warning: '__WORDSIZE' macro redefined [-Wmacro-redefined], как и ожидалось

1 Ответ

0 голосов
/ 07 декабря 2018

Технически выражение препроцессора не совсем __WORDSIZE == 64;но, скорее, он производится из этих токенов.Перед построением фактического выражения токены в выражении сканируются;происходит расширение макроса.Это своего рода точка зрения;Вы хотите проверить, равен ли определенный макрос __WORDSIZE 64.

Если окажется, что __WORDSIZE это не , развернутый во время этого сканирования, тогда вы получите __WORDSIZE == 64 в качестве выражения;в этом конкретном случае все оставшиеся идентификаторы обрабатываются как 0 перед вычислением ... что означает, что вы оцениваете выражение 0 == 64, которое является ложным.

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

...