Операционная система UNIX. Руководство программиста

     

Устаревший синтаксис


Ряд конструкций более ранней версии языка C теперь недопустимы. Они распадаются на два класса: операции присваивания и конструкции инициализации.

Устаревшие формы операций присваивания (=+, =- и т.д.) могли привести к неоднозначным выражениям, например, таким:

a =-1;

Это выражение можно трактовать как

a =- 1;

или как

a = -1 ;

Ситуация становится в особенности запутанной, если неоднозначные конструкции данного сорта появляются в результате макроподстановки. Более новые и предпочтельные операции (например, +=, -=, ...) не приводят к таким неоднозначностям. lint выдает сообщения, призывающие отказаться от устаревших конструкций.

Аналогичные проблемы возникают с инициализацией. Раньше язык допускал описание вида

int x 1;

инициализировавшее x единицей. Это приводило к трудностям в интерпретации других конструкций. Например, инициализация

int x (-1);

до некоторой степени походит на начало определения функции:

int x (y) . . .

и компилятор должен прочесть входной текст дальше x, чтобы докопаться до истинного смысла. И вновь затруднения еще более возрастают, когда инициализатор содержит макросы. В современном синтаксисе между именем переменной и инициализатором требуется знак =:

int x = -1;

В этом уже нет никакой синтаксической неоднозначности.



Содержание раздела