Устаревший синтаксис
Ряд конструкций более ранней версии языка C теперь недопустимы. Они распадаются на два класса: операции присваивания и конструкции инициализации.
Устаревшие формы операций присваивания (=+, =- и т.д.) могли привести к неоднозначным выражениям, например, таким:
a =-1;
Это выражение можно трактовать как
a =- 1;
или как
a = -1 ;
Ситуация становится в особенности запутанной, если неоднозначные конструкции данного сорта появляются в результате макроподстановки. Более новые и предпочтельные операции (например, +=, -=, ...) не приводят к таким неоднозначностям. lint выдает сообщения, призывающие отказаться от устаревших конструкций.
Аналогичные проблемы возникают с инициализацией. Раньше язык допускал описание вида
int x 1;
инициализировавшее x единицей. Это приводило к трудностям в интерпретации других конструкций. Например, инициализация
int x (-1);
до некоторой степени походит на начало определения функции:
int x (y) . . .
и компилятор должен прочесть входной текст дальше x, чтобы докопаться до истинного смысла. И вновь затруднения еще более возрастают, когда инициализатор содержит макросы. В современном синтаксисе между именем переменной и инициализатором требуется знак =:
int x = -1;
В этом уже нет никакой синтаксической неоднозначности.