Сергей Борщ 133 30 декабря, 2023 Опубликовано 30 декабря, 2023 · Жалоба 1 час назад, fpga_student сказал: Интересно бы понять в чем здесь сакральный смысл скобок. Когда писали - pll_mult и pll_mult_h были локальными переменными (что логично) и скобки ограничивали их область видимости. Потом код дорабатывал поклонник "классического K&R style" и он объявления переменных перенес в начало функции. Ну а скобки не входили в узкий круг понятий этого писаря, он их не тронул. 57 минут назад, jcxz сказал: Я почему-то обхожусь. Покажьте! Покажьте нам объявления локальных переменных внутри case без фигурных скобок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 30 декабря, 2023 Опубликовано 30 декабря, 2023 · Жалоба On 12/30/2023 at 9:14 PM, jcxz said: Странно... Я почему-то обхожусь. ЧЯДНТ? Значит MSVC и GCC что-то делают не так. А может быть вы не поняли о чем я ? switch(...) { case ... : { intt32_t a = 0; ..... } } Вот без фигурных скобок в case будет ошибка следующего содержания (для GCC) Quote error: a label can only be part of a statement and a declaration is not a statement Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpga_student 0 30 декабря, 2023 Опубликовано 30 декабря, 2023 (изменено) · Жалоба 8 hours ago, Сергей Борщ said: поклонник "классического K&R style" и он объявления переменных перенес в начало функции. Ну а скобки не входили в узкий круг понятий этого писаря, он их не тронул. Если верить Хабру, то поклонниками рационального стиля были Керниган и Ричи. Интересно они тоже были писарями ?) 8 hours ago, Сергей Борщ said: Когда писали - pll_mult и pll_mult_h были локальными переменными (что логично) и скобки ограничивали их область видимости. Потом код дорабатывал поклонник "классического K&R style" и он объявления переменных перенес в начало функции. Файл system_at32f415.c : case CRM_SCLK_PLL: pll_clock_source = CRM->cfg_bit.pllrcs; if(CRM->pll_bit.pllcfgen == FALSE){ /* get multiplication factor */ pll_mult = CRM->cfg_bit.pllmult_l; pll_mult_h = CRM->cfg_bit.pllmult_h; /* process high bits */ if((pll_mult_h != 0U) || (pll_mult == 15U)){ pll_mult += ((16U * pll_mult_h) + 1U); } else{ pll_mult += 2U; } if (pll_clock_source == 0x00){ /* hick divided by 2 selected as pll clock entry */ system_core_clock = (HICK_VALUE >> 1) * pll_mult; } else{ /* hext selected as pll clock entry */ if (CRM->cfg_bit.pllhextdiv != RESET){ /* hext clock divided by 2 */ system_core_clock = (HEXT_VALUE / 2) * pll_mult; } else{ system_core_clock = HEXT_VALUE * pll_mult; } } } else{ pll_ms = CRM->pll_bit.pllms; pll_ns = CRM->pll_bit.pllns; pll_fr = CRM->pll_bit.pllfr; if (pll_clock_source == 0x00){ /* hick divided by 2 selected as pll clock entry */ pllrcsfreq = (HICK_VALUE >> 1); } else{ /* hext selected as pll clock entry */ if (CRM->cfg_bit.pllhextdiv != RESET){ /* hext clock divided by 2 */ pllrcsfreq = (HEXT_VALUE / 2); } else{ pllrcsfreq = HEXT_VALUE; } } system_core_clock = (uint32_t)(((uint64_t)pllrcsfreq * pll_ns) / (pll_ms * (0x1 << pll_fr))); } break; Изменено 31 декабря, 2023 пользователем haker_fox Для оформления кода есть кнопка <>. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 30 декабря, 2023 Опубликовано 30 декабря, 2023 · Жалоба On 12/30/2023 at 10:21 PM, fpga_student said: Интересно они тоже были писарями ?) Да, были писарями. Целую книгу написали. On 12/30/2023 at 10:21 PM, fpga_student said: Файл system_at32f415.c : И что вы эту портянку второй раз приводите ? К тому же без должного оформления. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 133 30 декабря, 2023 Опубликовано 30 декабря, 2023 · Жалоба 11 минут назад, fpga_student сказал: поклонниками рационального стиля были Керниган и Ричи. Интересно они тоже были писарями ? В первом издании их книги "Язык програмирования Си", которая до введения в 89 году первого стандарта языка была стандартом де-факто (изложенный в ней стиль и является тем самым "K&R style"), требовалось все локальные переменные объявлять в начале функции. Уже в следующем стандарте от 99 года локальные переменные можно было объявлять где угодно по мере необходимости. Наверное для введения этого изменения в стандарт были приведены веские доводы и эти доводы были признаны вескими. И если мне не изменяет память - в следующих изданиях этой книги отцы-основатели приняли это изменение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpga_student 0 30 декабря, 2023 Опубликовано 30 декабря, 2023 · Жалоба On 12/30/2023 at 10:29 PM, dimka76 said: Да, были писарями. Целую книгу написали. Они сам язык еще написали) On 12/30/2023 at 10:29 PM, dimka76 said: И что вы эту портянку второй раз приводите ? К тому же без должного оформления. Там видно, что тот кто писал hal, тупо снес условный оператор(видимо в 403a условие не нужно проверять в отличие от 415), и половину ветвления, а операторные скобки оставил на месте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 133 30 декабря, 2023 Опубликовано 30 декабря, 2023 · Жалоба 13 минут назад, fpga_student сказал: Файл system_at32f415.c : И? Вопрос теперь в чем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpga_student 0 30 декабря, 2023 Опубликовано 30 декабря, 2023 · Жалоба On 12/30/2023 at 10:06 PM, Сергей Борщ said: Когда писали - pll_mult и pll_mult_h были локальными переменными (что логично) и скобки ограничивали их область видимости. Потом код дорабатывал поклонник "классического K&R style" и он объявления переменных перенес в начало функции. Ну а скобки не входили в узкий круг понятий этого писаря, он их не тронул. В том что эта версия неверна Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 133 30 декабря, 2023 Опубликовано 30 декабря, 2023 · Жалоба 4 минуты назад, fpga_student сказал: Там видно, что тот кто писал hal, тупо снес условный оператор(видимо в 403a условие не нужно проверять в отличие от 415) а операторные скобки оставил на месте Может быть и так. Изначально этих исходных данных вами озвучено не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpga_student 0 30 декабря, 2023 Опубликовано 30 декабря, 2023 · Жалоба On 12/30/2023 at 10:38 PM, Сергей Борщ said: Может быть и так. Изначально этих исходных данных вами озвучено не было. Наткнулся после того как начали обсуждать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpga_student 0 1 января Опубликовано 1 января · Жалоба Еще двое суток ужасных мучений и наконец-то удалось подобрать программу и регэкспы которые худо-бедно работают. Походу все что работает с регэкспами донельзя глюкавое в многострочных выражениях. Единственное кого недожал - PowerGrep - уж больно у него странный интерфейс(( хотя возможно он лучший из всех) Итоговые замены делает Multiple Search and Replace v.6.9. Тот же самый набор регэкспов в AdvanceFind&Replace 9.0 периодически недочищает символы перевода строки. Этот набор регэкспов переводит в рациональный "классический K&R" стиль любой другой с торчащей открывающей скобкой: \)\s*[\n\r]+\s*\{[\n\r]+ ){\n do\s*[\n\r]+\s*\{[\n\r]+ do{\n else\s*[\n\r]+\s*\{[\n\r]+ else{\n \"C\"\s*[\n\r]+\s*\{[\n\r]+ "C"{\n enum\s*[\n\r]+\s*\{[\n\r]+ enum{\n struct\s*[\n\r]+\s*\{[\n\r]+ struct{\n union\s*[\n\r]+\s*\{[\n\r]+ union{\n \=\s*[\n\r]+\s*\{[\n\r]+ = {\n PROTOTYPE\s*[\n\r]+\s*\{[\n\r]+ PROTOTYPE {\n зы. Периодически ОНО оставляет пробел, вопреки всему(( Те получается ) {, вместо ){. Мне уже болт, главное текст занимает минимум по высоте места, кому охота приключений может дотанцевать сам. Попытаться) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpga_student 0 1 января Опубликовано 1 января · Жалоба Да, таки дожал PowerGrep - он самый крутой. Фантастическая скорость работы, раз в 10 быстрее ближайшего конкурента. Погрипано этим набором регэкспов 500 метров сорцов на самом отстойном ноуте чуть не 2 ядра 1.5ГГц за 10 минут. Единственный тул что может отработать без ошибок регэкспы на несколько строк. \)\s*[\n\r]+\s*\{\s*[\n\r]+ ){\n do\s*[\n\r]+\s*\{\s*[\n\r]+ do{\n else\s*[\n\r]+\s*\{\s*[\n\r]+ else{\n \"C\"\s*[\n\r]+\s*\{\s*[\n\r]+ "C"{\n enum\s*[\n\r]+\s*\{\s*[\n\r]+ enum{\n struct\s*[\n\r]+\s*\{\s*[\n\r]+ struct{\n union\s*[\n\r]+\s*\{\s*[\n\r]+ union{\n \=\s*[\n\r]+\s*\{\s*[\n\r]+ = {\n PROTOTYPE\s*[\n\r]+\s*\{\s*[\n\r]+ PROTOTYPE {\n Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 36 1 января Опубликовано 1 января · Жалоба Казалось бы "причём здесь Чубайс" USART (((-8: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 226 2 января Опубликовано 2 января · Жалоба В 30.12.2023 в 21:06, Сергей Борщ сказал: Покажьте! Покажьте нам объявления локальных переменных внутри case без фигурных скобок. Странно... не думал, что здесь так много не умеющих написать примитивное объявление переменной.... int Tst1(int a, int *p) { int r = -1; switch (a) { case 0: int i0; i0 = p[0]; r = a + i0; break; case 1: int i1; i1 = p[1]; r = a * i1; break; case 2: int i2; i2 = p[2]; r = a << i2; } return r; } Что именно в таком тривиальном коде вызвало столько вопросов??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpga_student 0 2 января Опубликовано 2 января · Жалоба On 1/2/2024 at 12:31 AM, Obam said: Казалось бы "причём здесь Чубайс" USART (((-8: USART упал с неправильных регэкспов в неправильном туле. Завершение истории - правильные регэкспы в правильном туле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться