По мне, так то, что Вы написали, считается дурным тоном. Кровь из глаз пойдёт у читателя этого кода
По мне, так то, что Вы написали, считается дурным тоном. Кровь из глаз пойдёт у читателя этого кода
Если компилятор не соответствует стандарту и ведет себя не предсказуемо - втопку его.VladislavS писал(а):похоже вы не видели результаты работы по настоящему злобных оптимизирующих компиляторов.
Обоснуете?По мне, так то, что Вы написали, считается дурным тоном.
Сильно уж читателе-зависимый критерий. У иных кровь захлещет от любого мало-мальски профессионального представления.Кровь из глаз пойдёт у читателя этого кода
Нет конечно. Ибо - леньa5021 писал(а):Возьметесь оспаривать?
Запросто. Написание любого плохочитаемого кода априори является дурным тоном. По крайней мере, для меня. Возможно, для Вас это нормаa5021 писал(а):Обоснуете?
пишите так, и люди будут плевать вам вслед.a5021 писал(а):Еще одна забавная штука попалась на глаза: код, который нарушает все правила, но тем не менее работает.
тем не менее, не работает: https://ideone.com/557ULM GCC 6.3a5021 писал(а):но тем не менее работает. Это GCC 5.4.1
Код: Выделить всё
if (reset() && (delay(100), 1) && init() && (delay(100), 1) && run_cmd(MOVE_FORWARD)) {
// do smth
}Код: Выделить всё
if (! reset())
return;
delay(100);
if (! init())
return;
delay(100);
if (! run_cmd(MOVE_FORWARD))
return;
// do smth
Чтобы вам было легче прийти к такому примитивному выводу, я вам даже версию компайлера специально указал.код, эксплуатирующий багофичи отдельных версий компилятора - разве можно придумать что-то более ужасное?
мне хорошо: я никогда сам так не делаю (так, как показали вы и обсуждается последние пару страниц тут), и никому не советую так делать. и остаюсь при уверенности, что каждый, кто так делет - либо болен, либо возомнил о себе невесть что.a5021 писал(а):Плохо вам.
Проверил на STMке с GCC 5.4 и GCC 7. Работает нормально. Результат соответствует.ARV писал(а):тем не менее, не работает: https://ideone.com/557ULM GCC 6.3
писать компиляторо-зависимый код, т.е. код, эксплуатирующий багофичи отдельных версий компилятора - разве можно придумать что-то более ужасное?
что такое замыкательный способ использования, я не в курсе, но вложенные функции есть в расширениях GCC для Си.a5021 писал(а):Вложенных функций ведь нет в Си, насколько я в курсе, уж не говоря про "замыкательный" способ использования.
Я, например, не знал. Но тогда ваши стенания с заламыванием рук вообще смотрятся, как никудышная актерская работа: "If you try to call it after a containing scope level exits, and if it refers to some of the variables that are no longer in scope, you may be lucky, but it’s not wise to take the risk. If, however, the nested function does not refer to anything that has gone out of scope, you should be safe."я не в курсе, но вложенные функции есть в расширениях GCC для Си.
упаси бог, оно мне надо?!a5021 писал(а):Почитайте про замыкания в си ++
имеется.a5021 писал(а):Имеется, что возразить мануалу?
Все та же эгоцентричная модель мира. Вы в жизни никогда и не ошибались, наверное?1. я так никогда сам не делаю и другим не советую - см. ранее.
Собственные промахи вам приятнее объяснять коварством извне? Немного странно, конечно, но вполне объяснимо.запутало одинаковое наименование вложенных функций и указателей. это меня лишний раз убедило, что так делается исключительно ради того, чтобы поставить на место зарвавшихся самоучек
Код: Выделить всё
GPIOA->CRL = GPIO_BSSR_BSxКод: Выделить всё
GPIOA->CRH = GPIO_BSSR_BSxКод: Выделить всё
GPIOA->CRL = GPIO_BSSR_BS1Код: Выделить всё
#define GPIO_PIN_SET(PORT, PIN) // а тут должно быть условие типа if(PIN<8){тут что-то типа такого: GPIO##PORT->CRL= GPIO_BSSR_BS##PIN} else {тут что-то типа такого: GPIO##PORT->CRH= GPIO_BSSR_BS##PIN}Код: Выделить всё
GPIO_PIN_SET(A, 9);Код: Выделить всё
GPIOA->CRH= GPIO_BSSR_BS9;Код: Выделить всё
#define ISX_GPIO_PIN_SET (PORT, PIN) #if PIN<8 GPIO##PORT->CRL = ISX_GPIO_BS##PIN #else GPIO##PORT->CRH = ISX_GPIO_BS##PIN