Перейти к содержанию
    

Синтаксические несуразности C

В условных конструкциях и циклах между оператором и скобками обычно ставят пробел:

if () ...
for () ...

В функциях обычно пробел не ставят:

foo();

Мне показалось это нелогичным. И я уже переправил некоторые свои исходники, добавил пробелы. Как вдруг обнаружилось, что в макрофункции пробел вообще недопустим!

#define FOO() ...

Пришлось возвращаться к отброшенному.

Мне это не нравится!

Собственно, вот и весь сказ. Вопросов не имею. Кроме одного - а чем вам еще не нравится синтаксис языка C?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В условных конструкциях и циклах между оператором и скобками обычно ставят пробел:

if () ...
for () ...

В функциях обычно пробел не ставят:

foo();

Мне показалось это нелогичным. И я уже переправил некоторые свои исходники, добавил пробелы. Как вдруг обнаружилось, что в макрофункции пробел вообще недопустим!

Однообразие достигается просто - не ставьте НИГДЕ пробелов между оператором и относящимися к нему скобками, и будет вам щастье. :) Т.е. операторы for(), if(), while(), switch() допускают слитное написание, под стать функциям.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И я уже переправил некоторые свои исходники, добавил пробелы.

На этот случай есть автоформаттеры типа Astyle.

Зачем делать тупую работу? Пусть машина думает.

И вообще, пробелы перед скобками - это какое-то редкое извращение.

 

post-33646-1337949578_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Однообразие достигается просто...

Нет, на это я пойти не могу! Буду писать, как классики K&R учили. Утирая слезы и сопли. :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Одно
    маленькое
        замечание:
это
    не
        относится
к синтаксису. Равно как
и к чему-либо другому в
языке C. С точки зрения
языка это наш ascii-art
.

Маленькое уточнение — (отсутствующий) пробел в #define относится к синтаксису препроцессора.

Все остальные упомянутые пробелы (как и табуляции, переводы строк в тех же местах) не имеют отношения к синтаксису.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, на это я пойти не могу! Буду писать, как классики K&R учили. Утирая слезы и сопли. :crying:

Не всегда следует делать все так, как рекомендуют авторитеты. Необходимо иметь собственное мнение. В противном случае прогресс остановится :rolleyes:

 

Мне кажется, что лучше обратить внимание на четкие и грамотные комментарии, чем на форматирование текста... Хотя и оно играет немаловажную роль)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не всегда следует делать все так, как рекомендуют авторитеты. Необходимо иметь собственное мнение. В противном случае прогресс остановится :rolleyes:

 

Мне кажется, что лучше обратить внимание на четкие и грамотные комментарии, чем на форматирование текста... Хотя и оно играет немаловажную роль)

С комментариями у меня все в порядке. Да и со стилем написания тоже. Так, несколько моментов душу бередят.

Например, когда использовать /* ... */, а когда //. Делать ли пробелы в операторе for (i = a + b, i < 100, i = i + 10).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например, когда использовать /* ... */, а когда //.

// лучше избегать в #define - некоторые препроцессоры таких вольностей не любят.

 

Делать ли пробелы в операторе for (i = a + b, i < 100, i = i + 10).

ИМХО, делать, но только не перед скобками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО, делать, но только не перед скобками.

А чего так?

Я ставлю, и для меня это лишний быстрый признак, что сиё не функция.

 

Мне показалось это нелогичным.

Не пойму, что конкретно нелогичное? Дайте плиз ссыль на описание этой нелогичности. Из ветки неясно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чем вам еще не нравится синтаксис языка C?

У него БНФ ненормально распухшая, этим все сказано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не пойму, что конкретно нелогичное? Дайте плиз ссыль на описание этой нелогичности. Из ветки неясно.

Хочу, чтобы мое желание писать грамотно по-русски не вступало в противоречия с правилами синтаксиса C.

http://ru.wikipedia.org/wiki/%D0%9F%D1%80%...%B1%D0%B5%D0%BB

Правила постановки пробела рядом со знаками препинания

1. В русскоязычном наборе пробел ставится:

...

с внешней стороны скобок и кавычек;

...

 

У него БНФ ненормально распухшая, этим все сказано.

Сказано недостаточно, растолкуйте. Я знаю только Белорусский Народный Фронт, да и то, скорее, усохший, чем распухший.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочу, чтобы мое желание писать грамотно по-русски не вступало в противоречия с правилами синтаксиса C.

Это называется "смешалось в кучу кони, люди". Грамотно писать по-русски программы на Си :biggrin:

 

Ваш любимый пробел многие используют для зрительного разделения отдельных элементов языка. Его наличие гарантированно ускоряет чтение программы и быструю классификацию разнотипных её элементов. Собственно это есть оформление кода, которое компилятору "по барабану". На этот счёт понасоздавали и статей и глав в книгах. Но вот о введении приоритетов синтаксиса русяза в тексты компутерного языка, который принципиально во многом непохож на языки общения людей - это уже оригинально. Это даже может значить, что предложение исходит совсем не от программиста. Т.к. программер-то знает что оформление проги помогает быстро понять алгоритм и в оформлении нужны другие правила.

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чего так?

Я ставлю, и для меня это лишний быстрый признак, что сиё не функция.

Отсутствие пробела позволяет воспринимать конструкции типа for(...) как единое целое. Операторов в 'C' не так много, чтобы путать их с функциями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...как единое целое.

Не совсем ясная формулировка.

Но не думаю, что в ней есть что-то большее, чем удобство конкретного кодописателя (читателя). Другому с пробелом будет более удобно для понимания и это его полное право. Разрешены два (и даже более) варианта. А какой лучше в целом выявит разве что статистика, да и то, только в сугубо показательном виде. Но никак не в указательном. А то так и до расизма недалеко :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сказано недостаточно, растолкуйте.

Форма Бэкуса-Наура используется для формального описания синтаксиса языков программирования. Простые и логичные языки, такие как Форт, Паскаль, Модула и пр., имеют краткую БНФ, в результате их легко осваивать и не возникает путаницы и непоняток при использовании. Языки типа С, PL1 и т.п. имеют сложную БНФ поскольку их синтаксис не очень последователен и логичен, в нем много "информационного шума".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...