Я знаю, что этот вопрос касается C, но тот же вопрос для C ++ был закрыт как точный дубликат этого вопроса. Поэтому этот ответ может не применяться для C.
Последний проект стандарта C ++ 11 N3485 говорит об этом в 7.1.1 / 3:
Спецификатор
blockquote>register
- это намек на реализацию, которую объявленная переменная будет сильно использоваться. [ note: Подсказка может быть проигнорирована, и в большинстве реализаций она будет игнорироваться, если будет принят адрес переменной. Это использование устарело ... -end note ]В C ++ (но не в C) в стандарте не указано, что вы не можете принять адрес переменной, объявленной
register
; однако, поскольку переменная, хранящаяся в регистре CPU на протяжении всего жизненного цикла, не имеет связанного с ней местоположения памяти, попытка получить его адрес будет недействительной, а компилятор будет игнорировать ключевое словоregister
, чтобы разрешить прием адреса.