мне хорошо: я никогда сам так не делаю (так, как показали вы и обсуждается последние пару страниц тут), и никому не советую так делать. и остаюсь при уверенности, что каждый, кто так делет - либо болен, либо возомнил о себе невесть что.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
ARV писал(а):тем не менее, не работает: https://ideone.com/557ULM GCC 6.3
писать компиляторо-зависимый код, т.е. код, эксплуатирующий багофичи отдельных версий компилятора - разве можно придумать что-то более ужасное?
Проверил на STMке с GCC 5.4 и GCC 7. Работает нормально. Результат соответствует.
[uquote="ARV",url="/forum/viewtopic.php?p=3483948#p3483948"]я никогда сам так не делаю[/uquote]
Да не убивайтесь вы так. Курьез был опубликован для тех, кто понимает.
[uquote="viiv",url="/forum/viewtopic.php?p=3483832#p3483832"]Я противник подобных конструкций лишь потому,[/uquote]
Лишь потому, что не привыкли. Не собираетесь же вы скобки, которые часто используют для улучшения читабельности, обвинять в том, что читабельность они ухудшают, как это сделал один из ваших предшественников?
[uquote="a5021",url="/forum/viewtopic.php?p=3483993#p3483993"]Лишь потому, что не привыкли.[/uquote]
Хм. Как раз привык! И вполне нормально отношусь к такому в чужом коде. Если встречу, и не увижу ошибки, править такие тексты у меня даже мысли не возникнет, разве что добавть комментарий, что эта часть кода с "хитростью" работает правильно, так и задумывалось. Но,
1) как правило, мне не известна квалификация того, кто писал код, который я просматриваю. И к "хитростям" в коде отношусь осторожно. Бывает (и довольно часто), что "хитрости" применяют не до конца понимая, что они делают.
2) Надо "облегчать жизнь" читателям кода всеми доступными способами. Чем проще и "читабельнее" код, чем меньше в нем "хитростей", тем лучше.
Все это мое личное мнение и навязывать его никому не собираюсь. И спорить не буду, меня вряд ли кто сможет убедить в обратном.
[uquote="a5021",url="/forum/viewtopic.php?p=3483993#p3483993"]Не собираетесь же вы скобки, которые часто используют для улучшения читабельности, обвинять в том, что читабельность они ухудшают, как это сделал один из ваших предшественников?[/uquote]
Не, не собираюсь. Я приветствую все, что используются для улучшения читабельности!!!
[uquote="Мурик",url="/forum/viewtopic.php?p=3483965#p3483965"]]Проверил на STMке с GCC 5.4 и GCC 7. Работает нормально. Результат соответствует.[/uquote]
Только не очень понятно, как такое пролезло из C++ в C. Вложенных функций ведь нет в Си, насколько я в курсе, уж не говоря про "замыкательный" способ использования.
[uquote="ARV",url="/forum/viewtopic.php?p=3484130#p3484130"]что такое замыкательный способ использования,[/uquote]
Почитайте про замыкания в си ++. Часть волнительных переживаний, что вы озвучивали ранее, глядишь и утихнет.
я не в курсе, но вложенные функции есть в расширениях GCC для Си.
Я, например, не знал. Но тогда ваши стенания с заламыванием рук вообще смотрятся, как никудышная актерская работа: "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 говорит, что вызывать вложенные функции снаружи может быть безопасно. Имеется, что возразить мануалу?
имеется.
1. я так никогда сам не делаю и другим не советую - см. ранее. 2. вложенные функции не должны быть видны за пределами {} "охватывающей функции", поэтому я сильно удивлен, каким образом происходит взятие их адресов в main... запутало одинаковое наименование вложенных функций и указателей. это меня лишний раз убедило, что так делается исключительно ради того, чтобы поставить на место зарвавшихся самоучек (см. ранее) - только гуру в этом не ошибется.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
[uquote="ARV",url="/forum/viewtopic.php?p=3484144#p3484144"]упаси бог, оно мне надо?![/uquote]
Выходит, устраивать переполох без повода вам зачем-то надо.
1. я так никогда сам не делаю и другим не советую - см. ранее.
Все та же эгоцентричная модель мира. Вы в жизни никогда и не ошибались, наверное?
запутало одинаковое наименование вложенных функций и указателей. это меня лишний раз убедило, что так делается исключительно ради того, чтобы поставить на место зарвавшихся самоучек
Собственные промахи вам приятнее объяснять коварством извне? Немного странно, конечно, но вполне объяснимо.
Вечер добрый!
Хочу добавить универсальности своему коду на СИ, но никак не соображу как это сделать)
Есть строки, которые атомарно переключают пины микроконтроллера STM32F103, при этом если пин меньше 8, то нужно писать:
Можно ли как-то сделать макроопределение, чтоб оно определяло по номеру вывода какой регистр нужно использовать CRL или CRH?
Интересует именно макроопределение, так как после компиляции должна получиться простая строка типа:
#define GPIO_PIN_SET(PORT, PIN) // а тут должно быть условие типа if(PIN<8){тут что-то типа такого: GPIO##PORT->CRL= GPIO_BSSR_BS##PIN} else {тут что-то типа такого: GPIO##PORT->CRH= GPIO_BSSR_BS##PIN}
GPIOA->CRL указывает на младшую группу (0-7) пинов порта А. Запись бита в этот регистр устанавливает соответствующий пин.
GPIO_BSSR_BSx - это дефайн- маска конкретного пина (типа 0b00000000000000001)
Ну да, какая разница. Зачем привыкать делать как надо, если хочется через ж.
Добавлено after 1 minute 50 seconds:
[uquote="isx",url="/forum/viewtopic.php?p=3484323#p3484323"]GPIOA->CRL указывает на младшую группу (0-7) пинов порта А. Запись бита в этот регистр устанавливает соответствующий пин.[/uquote]
Вы уверены?
[uquote="isx",url="/forum/viewtopic.php?p=3484323#p3484323"]GPIOA->CRL указывает на младшую группу (0-7) пинов порта А. Запись бита в этот регистр устанавливает соответствующий пин.[/uquote]
Спойлер
Если нужен именно сброс/установка то, если это будет сделано записью в BRR или BSSR, то эта операция будет атомарной. Хоть макросом, хоть еще как. "Читение-модификация-запись" не атомарна, а запись всегда атомарна.
Не знаю как HAL и LL (их не использую), а в SPL для F0 и F1 ошибок пока не обнаружил, по крайней мере таких, из-за которых МК работал не так как задумано.