2016-11-12 7 views
-3

Я использую Groovy и, похоже, способен обрабатывать аналогичный синтаксис C/C++ без точек с запятой. Мой вопрос: почему C/C++ требует точки с запятой? Это облегчить компиляцию? Или есть на самом деле двусмысленности, о которых я не знаю (если да, пожалуйста, приведи примеры)?Почему C/C++ требует запятой?

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

+2

Потому что он делает. –

+3

Хороший родственный вопрос: [Почему компилятор не сообщает о запятой с запятой?] (Http://stackoverflow.com/questions/40135392/why-doesnt-the-compiler-report-a-missing-semicolon) –

+2

Потому что он не использует символы новой строки для разделения операторов. – glauxosdever

ответ

2

В этом нет никакой «причины». Так написаны языковые конструкции. Синтаксис включает в себя использование ; в качестве авторов.

Просто процитировать соответствующий пункт из C11, глава §5.1.1.2, Перевод фаз

  • Пробельные символы, разделяющие лексемы больше не значительны. Каждый токен предварительной обработки преобразуется в токен. Результирующие маркеры синтаксически и семантически анализируются и переводятся как единица перевода.

и newline is a whitespace.

+0

Есть ли двусмысленности в синтаксисе, о которых я не знаю? –

+0

@ChrisSmith: из-за запятой вы можете смело игнорировать все пробелы - включая конец строк. 'int main (void) {return 0; } 'действительно. – usr2564301

+2

@ChrisSmith Как c и C++ не рассматривают '\ n' как разделитель инструкций, было бы много двусмысленностей, да. –