Вы можете найти свидетельство старой нотации в 7-м издании UNIX Manual (том 2а) от января 1979 года, доступном в Интернете по адресу http://cm.bell -labs.com / 7thEdMan / (недоступно с июля 2015 года; июньская версия 2015 года теперь доступна через WayBack Machine по адресу http://cm.bell -labs.com / 7thEdMan / - или по адресу https://9p.io/7thEdMan/).
. Глава называется ' CСправочное руководство 'Денниса М. Ритчи, и есть в PDF-версии руководства, но не в HTML-версии. В соответствующей части написано:
7.14.1 lvalue= выражение
Значение выражения заменяет значение объекта, на который ссылается l-значение. Операнды не обязательно должны иметь один и тот же тип, но оба должны быть типом int, char, float, double или указателем.операнд - указатель, присваивание происходит, как и ожидалось, возможно, предшествует преобразованию выражения справа. Когда оба операнда являются int или указателями любого вида, преобразование никогда не происходит; значение expРецессия просто сохраняется в объекте, указанном в lvalue.Таким образом, можно генерировать указатели, которые будут вызывать исключения адресов при использовании.
7.14.2 lvalue = + выражение
7.14.3 lvalue = - выражение
7.14.4 lvalue = * выражение
7.14.5 lvalue = / выражение
7.14.6 lvalue =% выражение
7.14.7 lvalue = >> выражение
7.14.8 lvalue = << выражение <br>7.14.9 lvalue = & выражение
7.14.10 lvalue = ^ выражение
7.14.11 lvalue = |expression
Поведение выражения в форме '' E1 = op E2 '' можно вывести, взяв его за эквивалентное '' E1 = E1 op E2 '';однако E1 оценивается только один раз.Более того, выражения типа '' i = + p '', в которых указатель добавляется к целому числу, запрещены.
Отдельно есть бумага ' Evolution of C 'Л. Рослера в' UNIX® SYSTEM: Чтения и приложения, том II ', первоначально опубликованном AT & T в качестве технического журнала за октябрь 1984 г., позднее опубликованном в 1987 г. Прентис-Холл (ISBN 0-13-939845-7).Один из разделов этого:
III.Управление несовместимыми изменениями
Некоторые внесенные изменения неизбежно изменяют семантику существующих допустимых программ.Те, кто обслуживает различные компиляторы, используемые внутри, стараются обеспечить, чтобы программисты предупреждали, что такие изменения вступают в силу, и что введение новой версии компилятора не заставляет немедленно перекомпилировать все программы.
ДляНапример, в самых ранних реализациях неоднозначное выражение x=-1
интерпретировалось как означающее «уменьшение x на 1».Теперь оно интерпретируется как «присвоить значение от -1 до x».Это изменение произошло в течение трех ежегодных основных выпусков.Во-первых, компилятор и программный верификатор lint
были изменены, чтобы сгенерировать сообщение, предупреждающее о наличии «устаревшей» операции присваивания, такой как =-
.Затем парсеры были изменены на новую семантику, и компиляторы предупредили о неоднозначной операции присваивания.Наконец, предупреждающие сообщения были устранены.
Поддержка использования «старомодной инициализации»
int x 1;
(без знака равенства) была прекращена аналогичной стратегией.Это помогает синтаксическому анализатору производить более интеллектуальную диагностику синтаксических ошибок.
Как и ожидалось, некоторые пользователи C игнорировали предупреждения до тех пор, пока введение несовместимых компиляторов не заставило их выбирать между изменением устаревшего исходного кода или принятием обслуживания собственных версийкомпилятор.Но в целом стратегия поэтапных изменений оказалась успешной.