Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Синтаксические несуразности C
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
ViKo
В условных конструкциях и циклах между оператором и скобками обычно ставят пробел:
Код
if () ...
for () ...

В функциях обычно пробел не ставят:
Код
foo();

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

Пришлось возвращаться к отброшенному.
Мне это не нравится!
Собственно, вот и весь сказ. Вопросов не имею. Кроме одного - а чем вам еще не нравится синтаксис языка C?
Xenia
Цитата(ViKo @ May 25 2012, 15:32) *
В условных конструкциях и циклах между оператором и скобками обычно ставят пробел:
Код
if () ...
for () ...

В функциях обычно пробел не ставят:
Код
foo();

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

Однообразие достигается просто - не ставьте НИГДЕ пробелов между оператором и относящимися к нему скобками, и будет вам щастье. sm.gif Т.е. операторы for(), if(), while(), switch() допускают слитное написание, под стать функциям.
MrYuran
Цитата(ViKo @ May 25 2012, 15:32) *
И я уже переправил некоторые свои исходники, добавил пробелы.

На этот случай есть автоформаттеры типа Astyle.
Зачем делать тупую работу? Пусть машина думает.
И вообще, пробелы перед скобками - это какое-то редкое извращение.

Нажмите для просмотра прикрепленного файла
ViKo
Цитата(Xenia @ May 25 2012, 15:01) *
Однообразие достигается просто...

Нет, на это я пойти не могу! Буду писать, как классики K&R учили. Утирая слезы и сопли. crying.gif
ReAl
Код
Одно
    маленькое
        замечание:
это
    не
        относится
к синтаксису. Равно как
и к чему-либо другому в
языке C. С точки зрения
языка это наш ascii-art
.

Маленькое уточнение — (отсутствующий) пробел в #define относится к синтаксису препроцессора.
Все остальные упомянутые пробелы (как и табуляции, переводы строк в тех же местах) не имеют отношения к синтаксису.
haker_fox
QUOTE (ViKo @ May 25 2012, 20:05) *
Нет, на это я пойти не могу! Буду писать, как классики K&R учили. Утирая слезы и сопли. crying.gif

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

Мне кажется, что лучше обратить внимание на четкие и грамотные комментарии, чем на форматирование текста... Хотя и оно играет немаловажную роль)
ViKo
Цитата(haker_fox @ May 25 2012, 17:40) *
Не всегда следует делать все так, как рекомендуют авторитеты. Необходимо иметь собственное мнение. В противном случае прогресс остановится rolleyes.gif

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

С комментариями у меня все в порядке. Да и со стилем написания тоже. Так, несколько моментов душу бередят.
Например, когда использовать /* ... */, а когда //. Делать ли пробелы в операторе for (i = a + b, i < 100, i = i + 10).
aaarrr
Цитата(ViKo @ May 26 2012, 21:15) *
Например, когда использовать /* ... */, а когда //.

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

Цитата(ViKo @ May 26 2012, 21:15) *
Делать ли пробелы в операторе for (i = a + b, i < 100, i = i + 10).

ИМХО, делать, но только не перед скобками.
GetSmart
Цитата(aaarrr @ May 26 2012, 22:19) *
ИМХО, делать, но только не перед скобками.

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

Цитата(ViKo @ May 25 2012, 16:32) *
Мне показалось это нелогичным.

Не пойму, что конкретно нелогичное? Дайте плиз ссыль на описание этой нелогичности. Из ветки неясно.
=AK=
Цитата(ViKo @ May 25 2012, 21:02) *
чем вам еще не нравится синтаксис языка C?

У него БНФ ненормально распухшая, этим все сказано.
ViKo
Цитата(GetSmart @ May 27 2012, 07:46) *
Не пойму, что конкретно нелогичное? Дайте плиз ссыль на описание этой нелогичности. Из ветки неясно.

Хочу, чтобы мое желание писать грамотно по-русски не вступало в противоречия с правилами синтаксиса C.
http://ru.wikipedia.org/wiki/%D0%9F%D1%80%...%B1%D0%B5%D0%BB
Цитата
Правила постановки пробела рядом со знаками препинания
1. В русскоязычном наборе пробел ставится:
...
с внешней стороны скобок и кавычек;
...


Цитата(=AK= @ May 27 2012, 09:52) *
У него БНФ ненормально распухшая, этим все сказано.

Сказано недостаточно, растолкуйте. Я знаю только Белорусский Народный Фронт, да и то, скорее, усохший, чем распухший.
GetSmart
Цитата(ViKo @ May 27 2012, 12:15) *
Хочу, чтобы мое желание писать грамотно по-русски не вступало в противоречия с правилами синтаксиса C.

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

Ваш любимый пробел многие используют для зрительного разделения отдельных элементов языка. Его наличие гарантированно ускоряет чтение программы и быструю классификацию разнотипных её элементов. Собственно это есть оформление кода, которое компилятору "по барабану". На этот счёт понасоздавали и статей и глав в книгах. Но вот о введении приоритетов синтаксиса русяза в тексты компутерного языка, который принципиально во многом непохож на языки общения людей - это уже оригинально. Это даже может значить, что предложение исходит совсем не от программиста. Т.к. программер-то знает что оформление проги помогает быстро понять алгоритм и в оформлении нужны другие правила.
aaarrr
Цитата(GetSmart @ May 27 2012, 08:46) *
А чего так?
Я ставлю, и для меня это лишний быстрый признак, что сиё не функция.

Отсутствие пробела позволяет воспринимать конструкции типа for(...) как единое целое. Операторов в 'C' не так много, чтобы путать их с функциями.
GetSmart
Цитата(aaarrr @ May 27 2012, 13:45) *
...как единое целое.

Не совсем ясная формулировка.
Но не думаю, что в ней есть что-то большее, чем удобство конкретного кодописателя (читателя). Другому с пробелом будет более удобно для понимания и это его полное право. Разрешены два (и даже более) варианта. А какой лучше в целом выявит разве что статистика, да и то, только в сугубо показательном виде. Но никак не в указательном. А то так и до расизма недалеко sm.gif
=AK=
Цитата(ViKo @ May 27 2012, 16:45) *
Сказано недостаточно, растолкуйте.

Форма Бэкуса-Наура используется для формального описания синтаксиса языков программирования. Простые и логичные языки, такие как Форт, Паскаль, Модула и пр., имеют краткую БНФ, в результате их легко осваивать и не возникает путаницы и непоняток при использовании. Языки типа С, PL1 и т.п. имеют сложную БНФ поскольку их синтаксис не очень последователен и логичен, в нем много "информационного шума".
aaarrr
Цитата(GetSmart @ May 27 2012, 13:00) *
Не совсем ясная формулировка.

Единая языковая конструкция. Так лучше?

Цитата(GetSmart @ May 27 2012, 13:00) *
Но не думаю, что в ней есть что-то большее, чем удобство конкретного кодописателя (читателя). Другому с пробелом будет более удобно для понимания и это его полное право. Разрешены два (и даже более) варианта. А какой лучше в целом выявит разве что статистика, да и то, только в сугубо показательном виде. Но никак не в указательном. А то так и до расизма недалеко sm.gif

Дык я и не рассматриваю это иначе и уж точно не навязываю никому свое мнение. Потому и было написано ИМХО.
GetSmart
Цитата(aaarrr @ May 27 2012, 14:21) *
Единая языковая конструкция. Так лучше?

Не поверите, но тогда у меня с пробелом она тоже единая. Как собственно и в выражении a = b + c; никто не подумает, что она отличается от того же, без пробелов. Почему пробел должен менять эту "единость".

Цитата(aaarrr @ May 27 2012, 14:21) *
Дык я и не рассматриваю это иначе и уж точно не навязываю никому свое мнение. Потому и было написано ИМХО.

У ТС изначально некорректно предложение. Там вопрос не в синтаксисе, а в оформлении ака удобстве. Если тексты на Си будут оформляться разнообразно, то что с того? Почему надо что-то запрещать?
aaarrr
Цитата(GetSmart @ May 27 2012, 13:33) *
Почему пробел должен менять эту "единость".

Потому что человек все воспринимает по некоторому шаблону, "разрыв" шаблона ломает и восприятие.

Утрированный пример:
Код
for
/* Тут мы напишем
десять строк комментариев,
которые как-бы ничем
не отличаются от
пробела */
    (x = 0; x < 10; ++x)
GetSmart
Цитата(aaarrr @ May 27 2012, 14:39) *
Утрированный пример:

Правильнее - извращённый. Так пишут только извращенцы (разве нет?). Или поделитесь примером такого кода из сети.
Речь шла только об одном пробеле между for и скобкой, естественно в одной строке. Этот вариант юзают многие программисты, адекватные и вобщем не дураки. Так зачем их так оскорблять?

Может у Вас неправильный шаблон? У меня другие шаблоны - когда рядом с индентификатором впритык скобка - сиё есть функция. Скобка после пробела - сиё выражение в скобках. Обе цельноединые.

-----
Давайте ещё обсудим где ставить открывающую фигурную скобку - в следующей строке, на позиции нижестоящей закрывающей, или в конце текущей строки и совсем не на позиции закрывающей. Вот эта тема куда более религиозная.
aaarrr
Цитата(GetSmart @ May 27 2012, 13:50) *
Так зачем их так оскорблять?

Приехали. Кто ж их оскорбляет?
GetSmart
Цитата(aaarrr @ May 27 2012, 14:53) *
Приехали. Кто ж их оскорбляет?

sm.gif
Оскорбили передёргивая. Написав, что пробел между for и скобкой равноценен той билиберде. Точнее, можно интерпретировать за ту билеберду (типа если есть желание). Тем более что подтвердить ссылкой не удосужились. Иначе это могло и не быть передёргиванием.
aaarrr
Цитата(GetSmart @ May 27 2012, 13:50) *
Может у Вас неправильный шаблон? У меня другие шаблоны - когда рядом с индентификатором впритык скобка - сиё есть функция. Скобка после пробела - сиё выражение в скобках. Обе цельноединые.

Еще раз повторяю для особо непонятливых: сие есть мое персональное мнение. У Вас другое - да пожалуйста.
Только не надо разводить флуд и обсуждение на тему правильно-неправильно.
GetSmart
Цитата(aaarrr @ May 27 2012, 15:08) *
Только не надо разводить флуд и обсуждение на тему правильно-неправильно.

Это ко мне что ли?
Моё мнение изначально было, что вариант с пробелом имеет право быть. И только.
Если я "защищал" вариант с пробелом, то это не значит, что я критикую вариант без пробела.
Соответственно "защищать" вариант критикуемый ТС - не есть флуд.
ViKo
Цитата(aaarrr @ May 27 2012, 12:39) *
Утрированный пример:
Код
for
/* Тут мы напишем
десять строк комментариев,
которые как-бы ничем
не отличаются от
пробела */
    (x = 0; x < 10; ++x)

По-моему, так писать нельзя. Нельзя разрывать оператор комментариями.
Обн. Нет, можно. В книжке вычитал.

Для GetSmart
Ну, пусть называется "оформление" вместо "синтаксиса". Хотя для #define это уже не оформление, а именно синтаксис.
Я, кстати, пишу так же, как и Вы. По-крайней мере, в отношении пробелов. И по той же причине.
M_Andrey
А меня бесят комментарии типа /*...*/. Иногда надо быстро закомментировать процедуру, ан нет в процедуре кто-то написал 100500 таких комментариев и трындец!
andrew_b
Цитата(M_Andrey @ May 27 2012, 18:14) *
А меня бесят комментарии типа /*...*/. Иногда надо быстро закомментировать процедуру, ан нет в процедуре кто-то написал 100500 таких комментариев и трындец!
#if 0 вам в помощь.
M_Andrey
Цитата(andrew_b @ May 27 2012, 18:51) *
#if 0 вам в помощь.


Можно и так, вот только потом искать #endif без подсветки тяжко.
MrYuran
Цитата(M_Andrey @ May 27 2012, 18:14) *
А меня бесят комментарии типа /*...*/. Иногда надо быстро закомментировать процедуру, ан нет в процедуре кто-то написал 100500 таких комментариев и трындец!

Нормальные IDE имеют хоткеи comment/uncomment.
Например, в С::В это Shift-Ctrl-C/X.
Проверил только что - box снимает без вопросов, а потом ставит нормальный человеческий //
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.