• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Предложение Никогда так не делайте!

pvvx

Активный участник сообщества
Браво, Вы опровергли основы структурного программирования а заодно и основы системного подхода.
Ничего я не опровергал. Вроде написал - "пишите в столбик":
Вместо *a++;
b = *a;
a = a + 1;
и никаких скобок :)
 

pvvx

Активный участник сообщества
"Всем спецам знающим С вопрос:
*a = *---*b/*-c;
Сколько тут ошибок?"

Пока только один откликнулся... остальным слабо? Головой без компилятора?

уточнюсь:
pvvx - "Ошибок там нет. Всё разбирается однозначно."
nikolz - сказал что "Компилятор сказал, что ошибок нет.Так как это выражение нигде далее не применяется, но сделал замечание что отсутствует ;" и как обычно удалил свой комментарий

жду правильного ответа от rst и других...
Вы сократили ответ :) Смысл был в том, что ошибок по разбору и неопределенностей там нет + может присутствовать перегрузка операторов Перегрузка операторов в C++
 
Последнее редактирование:

rst

Member
Тогда уж начните с того, что не хватает "void main" :)
Кому не хватает? И для чего не хватает? И причём тут main когда разговор о синтаксисе языка?
Если говорить о некоей программе, то она вполне может обходиться и без main.
 

Юрий Ботов

Moderator
Команда форума
Ну что-ж пора давать ответ на загадку. Ошибки бывают не только синтаксические...

загадка: сколько здесь ошибок *a=*---*b/*-c;

1. Самая худшая из ошибок это "/*" она тупо выбрасывает кусок вашего кода до первого встреченного закрывающего комментария. При этом иногда даже вообще никак не диагностируется, иногда диагностируются черте-где внизу как неизвестная переменная или отсутствие точки с запятой
2. "---" тут то с приоритетами все понятно... но где будем ставить пробел? "a - --b" и "a-- - b" это сильно разные вещи.
3. "*-" встречается дважды, противоречит здравому смыслу. *адрес - адрес не может быть отрицательным, он вообще то unsigned.
4. "-c" аналогично, адрес не может быть отрицательным

Те кто указал что есть ошибка "отсутствие точки с запятой" ошиблись еще раз, точка с запятой тут есть и только сильно упертый слепой этого не видит.
Есть кому дополнить?

PS. Я подразумеваю что ошибка это не то что нашел компилятор, а то что накосячил человек. Уточняю это потому что вижу в нескольких постах выше именно первую трактовку...
 
Последнее редактирование:

kab

New member
@Юрий Ботов
Всё-таки, не понял, почему "/*" - ошибка? А не сознательное закомментирование части кода, заканчивающееся где-то в нижеследующих строчках? Можно поподробнее для этого места? И ";" - всё же закомментирована...
 

Юрий Ботов

Moderator
Команда форума
Если бы я хотел показать осознанное применение комментария я бы дал в примере и закрывающий комментарий.
Задача примера была - показать что человек при беглом просмотре кода одни и те-же конструкции воспринимает не всегда так-же как компилятор при формальном разборе. Есть конструкции в которых люди ошибаются чаще (= внутри if, огород указателей там где можно использовать просто массив, ), в других реже. И в общем то здравая мысль: избегать того в чем высока вероятность ошибки.
 

rst

Member
Те кто указал что есть ошибка "отсутствие точки с запятой" ошиблись еще раз, точка с запятой тут есть и только сильно упертый слепой этого не видит.
И где же там у вас в исходном ';' ??? Просветите пожалуйста нас, упёртых :eek:
 

kab

New member
Если бы я хотел показать осознанное применение комментария я бы дал в примере и закрывающий комментарий.
Задача примера была - показать что человек при беглом просмотре кода одни и те-же конструкции воспринимает не всегда так-же как компилятор при формальном разборе. Есть конструкции в которых люди ошибаются чаще (= внутри if, огород указателей там где можно использовать просто массив, ), в других реже. И в общем то здравая мысль: избегать того в чем высока вероятность ошибки.
Ну, типа - "keep it simple stupid" - и не поспоришь :):):)
 

Юрий Ботов

Moderator
Команда форума

rst

Member
А начало где? A "a" кто такая? ...
Вот именно поэтому такие конкурсы типа "найди количество ошибок" абсолютно бесмыссленны.
Может быть или "без ошибок" или "есть ошибки". Потому что если есть нарушение синтаксиса, то какой из символов считать правильным, а какой нет - есть тысяча возможных вариантов.
Но несомненная ошибка у автора этой задачи - нет указания типа переменных (или констант/макросов/etc?). Это говорит о том, что автор даже не умеет правильно сформулировать задачу.
 

rst

Member
Да разуйте же глаза-то!!!
Вы сами разуйте. И прочитайте хотя-бы учебник для начинающих по си. Тогда может узнаете что /* - это начало комментария, и всё что после него должно быть отброшено парсером си до парного */ при разборе исходника. А уже после отброса комментов, парсер попытается скомпилить выражение и обнаружит следующую ошибку - отсутствие ';'.
 

Юрий Ботов

Moderator
Команда форума
Кому не хватает? И для чего не хватает? И причём тут main когда разговор о синтаксисе языка?
Если говорить о некоей программе, то она вполне может обходиться и без main.
Но несомненная ошибка у автора этой задачи - нет указания типа переменных (или констант/макросов/etc?). Это говорит о том, что автор даже не умеет правильно сформулировать задачу.
:)
 

Юрий Ботов

Moderator
Команда форума
И прочитайте хотя-бы учебник для начинающих по си. Тогда может узнаете что /* - это начало комментария, и всё что после него должно быть отброшено парсером си до парного */ при разборе исходника. А уже после отброса комментов, парсер попытается скомпилить выражение и обнаружит следующую ошибку - отсутствие ';'.
Здесь нет ошибки "отсутствие точки с запятой" тут есть ошибка "забыли поставить пробел между слэшем и звездочкой". И то что вы вслед за компилятором талдычите чушь - не делает вам чести.
 

rst

Member
Здесь нет ошибки "отсутствие точки с запятой" тут есть ошибка "забыли поставить пробел между слэшем и звездочкой".
Да ладно??А если бы поставили пробел то что было-бы?
А почему именно пробел? А если забыли поставить '2' между слэшем и звездочкой?
А если вместо звёздочки хотели поставить '-' ?
И ещё 100500 вариантов.
И то что вы вслед за компилятором талдычите чушь - не делает вам чести.
Видимо Вы, когда компилятор обнаруживает ошибку, так ему и отвечаете: "Ты талдычишь чушь! Ну ка - компили мне без ошибок!" :D
 

pvvx

Активный участник сообщества
Да разуйте же глаза-то!!!
пример:
a + b = c;
Сколько тут ошибок? (Ответ см.выше, по ссылке :))
А в вашей задачи отсутствует буква "и", из неописанных условий задачи "A и Б сидели на трубе...".
Будем считать ли это ошибкой?

Правильным ответом является расшифровка на понятное "начинающим" данной абракадабры:
"Всякий раз, когда оба выражения являются унарными операторами, ассоциативность - справа налево."
Т.е. надо доходчиво и с рисунками описать, что такое "выражение", "оператор", "унарность", "ассоциативность",... Иначе путаница будет продолжаться, т.к. детям не ясно что из составных частей идет "справа налево", а что "слева направо".
И что альтернативным вариантом [inline]*(readBuf++)[/inline] является:

x = *readBuf;
readBuf++;


а не какие-то там скобки.
Ну и далее эти варианты прикладывать к понятиям "структурного программирования" и "основы системного подхода."
Чуете какая тут длинная затронутая тема (?), и конца и края у неё нет...
 
Последнее редактирование:
Сверху Снизу