jcxz 241 1 октября, 2022 Опубликовано 1 октября, 2022 · Жалоба 2 часа назад, KnightIgor сказал: У меня такой вопрос "back to roots": в чём глубинный смысл { ... } while (0) вместо просто { ... } ? У меня и второй вариант всегда работал... Смысла никакого. Смысл есть в: #define ... do {...} while (0) А ваше разве вообще компилится без ошибок? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 1 октября, 2022 Опубликовано 1 октября, 2022 · Жалоба On 10/20/2015 at 11:53 AM, GenaSPB said: Или так... #define arm_stm32f30x_hardware_pio_altfn(gpio, opins, afn) \ { \ const portholder_t lo = power4((opins) >> 0); \ const portholder_t hi = power4((opins) >> 8); \ (gpio)->AFR [0] = ((gpio)->AFR [0] & ~ (lo * 0x0f)) | (lo * (afn)); \ (gpio)->AFR [1] = ((gpio)->AFR [1] & ~ (hi * 0x0f)) | (hi * (afn)); \ } while (0) pio.zip 11.78 kB · 18 downloads Кстати do пропущено в цитате... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба On 10/1/2022 at 12:42 PM, aaarrr said: Так не будет работать: #define f() { ... } if (cond) f(); else ... Ой... Синтаксически if(cond) и одним оператором до else (если есть) БЕЗ {} будет компилиться и даже правильно работать, но с таким синтаксисом по дресс-коду в порядочные дома не пускают. Страстно везде рекомендуется облачиться в скобки: if (cond) { } else { } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба 3 minutes ago, KnightIgor said: везде Где? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба On 10/1/2022 at 2:34 PM, jcxz said: Смысла никакого. Смысл есть в: #define ... do {...} while (0) А ваше разве вообще компилится без ошибок? А почему бы и нет? Более того, облачив кусок кода в скобки, можно в C объявить локальные переменные. Нынешние С, в отличие о старых стандартов, позволяют смешивать объявление переменных и код по ходу текста, но меня учили, что это плохой тон, и я делаю сначала объявление переменных/констант, а потом уже операторы, однако внутренние локальные переменные тоже в этом стиле допустимы, если объявление находится внутри "локальных" {}: 4 minutes ago, aaarrr said: Где? Это такие "basics", что я даже не вспомню и не смогу для вас привести ссылки на литературу для начинающий в программировании. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба 2 minutes ago, KnightIgor said: меня учили, что это плохой тон Это хороший тон. Понадобилась переменная, создал её и сразу присвоил значение. Не все компиляторы могут отслеживать использование переменной, которой не было присвоено значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба 18 minutes ago, KnightIgor said: даже не вспомню не сомневался 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 22 hours ago, aaarrr said: не сомневался Все, что работает - допустимо. Мы говорим о стиле. Есть определенные договоренности по синтаксису. https://www.mikrocontroller.net/wikifiles/b/b3/CodeStyleConventions_ID_Software.pdf Если вы хотите, скажем, влиться в мировое сообщество программистов, занимающихся каким-либо проектом (например, тот же Linux), вам следует придерживаться оговоренного стиля. Например, такого, который изложен по ссылке. Использование скобок даже для одного оператора после if (cond) обусловлено тем, чтобы избегать ошибок невнимательности при расширении кода. Например, у вас есть конструкция if (cond) func(1); и вам надо в процессе развития кода под if () вставить еще несколько операторов, то вы, очевидно, должны написать if (cond) { func1(); func2(); } Однако практика работы показывает, что делаются ошибки такого рода: if (cond) func1(); func2(); Как бы вы ни были внимательны и круты (как вы захотите о себе утверждать), такого рода залеты случаются сплошь и рядом (люди - не роботы). Поэтому, как мера безопасности, в сообществе программистов выработан стиль, помогающий уменьшить вероятность таких ошибок типа "copy paste" и "add stuff". В данном случае - скобки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 9 minutes ago, KnightIgor said: например, тот же Linux Do not unnecessarily use braces where a single statement will do. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 9 minutes ago, aaarrr said: Do not unnecessarily use braces where a single statement will do. Вы не понимаете, о чем я. Синтаксически нет необходимости в скобках после if с одним оператором. Речь о развивающемся коде! Я ловил такие ошибки у коллег. Есть такое понятие "глаза замыливаются": вы просто не видите свой код, а коллега бросает взгляд через ваше плечо и тыкает пальцем. Вы что, программер - одиночка, не работали в коллективе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 5 minutes ago, KnightIgor said: Вы не понимаете это другое Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба Вопросы мироздания расстановки скобок поднимались тут уже неоднократно, и это уже некий циклический процесс с периодичностью примерно год. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба Очередной пророк скобкопоклонничества с вычитанными где-то выводами на основе средней температуры по больнице..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 12 minutes ago, jcxz said: Очередной пророк скобкопоклонничества с вычитанными где-то выводами на основе средней температуры по больнице..... Каждый волен делать свои ошибки сам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться