Какие макросы препроцессора не могут быть определены? - PullRequest
0 голосов
/ 27 мая 2019

Я заметил, что попытка определить defined как макрос в C / C ++ дает ошибку:

error: "defined" cannot be used as a macro name

Это не кажется мне странным, так как разрешение переопределения defined будетвероятно нарушить #if defined(...)-подобные директивы.Тем не менее, это заставило меня задуматься, какие другие ключевые слова будут давать ошибку компиляции 1 .Я обнаружил, что именованные операторы C ++ также нельзя использовать в define, но я не смог найти список всех невозможных макросов.Существуют ли другие макросы, которые не могут быть определены?

1 , в то время как (пере) определение ключевых слов, таких как if или int, является наихудшей вещью, которую можно сделать с препроцессоромЭто не приводит к ошибке компиляции.Я ищу ключевые слова, которые вообще не будут компилироваться.

1 Ответ

0 голосов
/ 27 мая 2019

Согласно gnu.org, «вы можете определить любой допустимый идентификатор как макрос, даже если это ключевое слово C. Препроцессор ничего не знает о ключевых словах. Это может быть полезно, если вы хотите скрыть такое ключевое слово, как 'const 'из более старого компилятора, который его не понимает. Однако оператор препроцессора' определен 'никогда не может быть определен как макрос. "

...