int 2ab;
int 2;
Для вышеуказанных объявлений укажите, какая из них является лексической ошибкой и синтаксической ошибкой на языке C. Я смущен в обеих декларациях.Разница между лексической и синтаксической ошибкой
int 2ab;
int 2;
Для вышеуказанных объявлений укажите, какая из них является лексической ошибкой и синтаксической ошибкой на языке C. Я смущен в обеих декларациях.Разница между лексической и синтаксической ошибкой
Оба заявления являются недопустимыми, так что вы по праву спутать, но по разным причинам:
Лексическая ошибка возникает, когда компилятор не распознает последовательность символов в качестве надлежащих лексических маркеров. 2ab
не является действительным значком C. (Обратите внимание, что 2ab
- это действительный токен предварительной обработки C, который можно использовать при вставке макросов, но это кажется выше вашего текущего уровня квалификации).
Синтаксическая ошибка возникает, когда последовательность токенов не соответствует директиве C: statement, expression, preprocessing directive ... int 2;
является синтаксической ошибкой, поскольку тип запускает определение, а число не является ожидаемым токеном в такой контекст: идентификатор или, возможно, *
, a (
, ожидается спецификатор или квалификатор.
Обратите внимание, что классификаторы и типа или хранения спецификаторы могут появляться в значительной степени любом порядке в объявлениях C:
int typedef const long cint; // same as typedef const long int cint;
int volatile static short x; // same as static volatile short int x;
int long unsigned long extern ll; // same as extern unsigned long long int ll;
выше действительные заявления являются примерами изменений вы должны не использование ;-)
OMG, что 'typedef' не должен быть первым ударом меня! –
@JohnHascall: мой любимый девиз: * узнайте что-то новое каждый день! * Я использовал C в течение 35 лет, и я не понимал этого, пока не написал свой третий C-парсер. – chqrlie
@chqrlie, извините, но '2ab' распознается в C как ** два ** токена (число' 2', за которым следует идентификатор 'ab'). Лексическая ошибка - это, например, неисчерпаемая строка (что-то как' abc '), который недопустим даже как один символ' ''. –