Точка с запятой в C ++?

См. наш SD-Obfuscator . Обрабатывает огромные системы файлов PHP. На сервере PHP нет требований времени выполнения. Нет дополнительных дополнительных затрат времени.

[EDIT май 2016]. В недавнем ответе было отмечено, что Zend не обрабатывает PHP5.5. SD-обфускатор PHP PHP.

23
задан Peter Mortensen 18 June 2015 в 18:20
поделиться

9 ответов

Во многих случаях требуется точка с запятой.

Что если бы у вас было:

int *y;
int f = 1
*y = 2;

Это было бы проанализировано как

int *y;
int f = 1 * y = 2;

Так что без точек с запятой это неоднозначно.

29
ответ дан Jason Williams 18 June 2015 в 18:20
поделиться

Это очень хорошо, что компилятор C ++ не делает этого. Один из худших аспектов JavaScript - это точка с запятой. Представьте себе это:

return
  (a + b);

Компилятор C ++ с радостью продолжит следующую строку, как и ожидалось, в то время как язык, который «вставляет» точки с запятой, как JavaScript, будет обрабатывать его как «return»; и пропустить "(a + b);".

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

55
ответ дан Delan Azabani 18 June 2015 в 18:20
поделиться

Во-первых, это только маленький пример; Вы уверены, что компилятор может разумно сказать вам, что не так для более сложного кода? Для любого куска кода? Могут ли все компиляторы разумно распознавать это одинаково, чтобы кусок кода C ++ мог быть гарантированно переносимым с пропущенными точками с запятой?

Во-вторых, C ++ был создан более десяти лет назад, когда вычислительные ресурсы - не то, что нужно. они сейчас. Даже сегодня сборка может занять значительное время. Точки с запятой помогают четко разграничить различные команды (для пользователя и для компилятора!) И помогают как программисту, так и компилятору понять, что происходит.

8
ответ дан Pete Schlette 18 June 2015 в 18:20
поделиться

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

4
ответ дан Himadri 18 June 2015 в 18:20
поделиться

Наличие точек с запятой (или разрывов строк, выберите один) делает компилятор намного проще, а сообщения об ошибках - более читабельными.

Но вопреки тому, что говорили другие люди, ни одна из форм разделителей (как абсолют ) строго не нужна.

Рассмотрим, например, Haskell, который не имеет ни того, ни другого. Даже текущая версия VB допускает разрывы строк во многих местах внутри оператора, как это делает Python. Ни один не требует продолжения строки во многих местах.

Например, VB теперь разрешает следующий код:

Dim result = From element in collection
             Where element < threshold
             Select element

Без разделителей операторов, без продолжений строк и, тем не менее, без двусмысленностей.

Теоретически это можно было бы продвинуть гораздо дальше. Все неясности могут быть устранены (опять же, посмотрите на Haskell), введя некоторые правила. Но опять же, это делает синтаксический анализатор намного более сложным (он должен быть контекстно-зависимым во многих местах, например, в вашем примере return, который не может быть решен без предварительного знания возвращаемого типа функции). И опять же, это значительно усложняет вывод значимой диагностики, поскольку ошибочный разрыв строки может означать любую из нескольких вещей, поэтому компилятор не может знать , какую ошибку сделал пользователь, и даже где ] ошибка была допущена.

3
ответ дан Konrad Rudolph 18 June 2015 в 18:20
поделиться

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

2
ответ дан Bozhidar Batsov 18 June 2015 в 18:20
поделиться

+1 вам обоим.

Точка с запятой - это разделитель командной строки, в отличие от VB, python и т. Д. C и C ++ игнорируют пробелы в строках кода, включая символы возврата каретки! Первоначально это было связано с тем, что при появлении C компьютерные мониторы могли обрабатывать только 80 символов текста, а поскольку C ++ основан на спецификации C, он последовал их примеру.

Я мог бы опубликовать вопрос «Почему я должен постоянно получать ошибки об отсутствии \ символов в VB, когда я пытаюсь написать код в несколько строк, конечно, если VB знает о проблеме, он может вставить его?»

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

0
ответ дан ChrisBD 18 June 2015 в 18:20
поделиться

Я не буду больше распространять потребность в символах точка с запятой по сравнению с символами продолжения строки, у них есть как преимущества, так и недостатки, и, в конце концов, это простой выбор дизайна языка (даже если он затрагивает всех пользователей).

Меня больше беспокоит предложение компилятора исправить код.

Если вы когда-либо видели изумительный инструмент (такой как ... гм, давайте подберем инструмент merge) и то, как он выполняет свою автоматизированную работу, вы были бы очень рады, что компилятор не изменил код , В конечном счете, если бы компилятор знал, как исправить код, это означало бы, что он знал о ваших намерениях, и передача мысли еще не была реализована.

Что касается предупреждения ? Любой программист знает, что предупреждения должны рассматриваться как ошибки (а компиляция прекращается), в чем же преимущество?

0
ответ дан Matthieu M. 18 June 2015 в 18:20
поделиться
int sdf = 1,df=2;
sdf=1 df =2

Я думаю, что общая проблема заключается в том, что без точки с запятой невозможно сказать, что на самом деле имел бы в виду программист (например, может быть, вторая строка была задана как sdf = 1 + df - 2; с серьезными опечатками). Нечто подобное может произойти из-за совершенно произвольных опечаток и иметь какое-то намеренное значение, поэтому, в конце концов, может быть плохой идеей, чтобы компилятор молча «исправлял» ошибки.

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

Точка с запятой может показаться избыточной, но для программиста это простой способ подтвердить «да, это было мое намерение».

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

0
ответ дан visitor 18 June 2015 в 18:20
поделиться