Size: a a a

🎄Embedded Group

2021 January 21

K

Kitnerboy Redoubt in 🎄Embedded Group
Andrej Kostrov
Да, если включен варнлевел.
А чего бы его не включить?
источник

AK

Andrej Kostrov in 🎄Embedded Group
Kitnerboy Redoubt
Читаемость повышается, если переменные последовательно друг за другом идут.
Константы
источник

K

Kitnerboy Redoubt in 🎄Embedded Group
pedantic - и погнали.
источник

AK

Andrej Kostrov in 🎄Embedded Group
Kitnerboy Redoubt
А чего бы его не включить?
Некоторые так и делают
источник

A

Aleksandr Zharov in 🎄Embedded Group
Kitnerboy Redoubt
switch будет варнить, если не все варианты из enum проверил.
описывать default - хороший тон
источник

K

Kitnerboy Redoubt in 🎄Embedded Group
Aleksandr Zharov
описывать default - хороший тон
Тогда варнить не будет.
источник

AK

Andrej Kostrov in 🎄Embedded Group
Electronics Designer
enum хорош по большей части тем, что это полноценный тип, и, например, при передаче такого значения в функцию как параметра этот тип проверяется.

define хорош тем, что это простая текстовая замена, которая дает куда больше свободы. Можно делать макросы. Макросы это удобно и классно, но только если четко представляешь, что делаешь и зачем.
Зато разбирать код с макросами этими даже свой по прошествии времени труднее
источник

AK

Andrej Kostrov in 🎄Embedded Group
Kitnerboy Redoubt
Тогда варнить не будет.
Точно?
источник

AK

Andrej Kostrov in 🎄Embedded Group
Отсутствие Дефаулт по моему само собой варнится
источник

K

Kitnerboy Redoubt in 🎄Embedded Group
Andrej Kostrov
Точно?
Ну я имею в в виду, что если у меня switch по enum, я добавляю в enum новый пункт. Если в свитче есть default, то варнинга не будет, и я могу не вспомнить добавть обработку нового пункта. А если default Не будет, то будет варнинг, что в switch учтены не все варианты.
источник

AK

Andrej Kostrov in 🎄Embedded Group
Kitnerboy Redoubt
Ну я имею в в виду, что если у меня switch по enum, я добавляю в enum новый пункт. Если в свитче есть default, то варнинга не будет, и я могу не вспомнить добавть обработку нового пункта. А если default Не будет, то будет варнинг, что в switch учтены не все варианты.
Не проверял ещё как он в деталях реагирует
источник

AK

Andrej Kostrov in 🎄Embedded Group
Думаю что от компайлера зависит ещё
источник

A

Aleksandr Zharov in 🎄Embedded Group
возможен вариант, когда на switch попадет то, чего нет в enum
источник

K

Kitnerboy Redoubt in 🎄Embedded Group
Aleksandr Zharov
возможен вариант, когда на switch попадет то, чего нет в enum
case value ‘100’ not in enumerated type ‘T_ACTIVE_CHANNEL’ [-Wswitch]

Есть такое.
источник

K

Kitnerboy Redoubt in 🎄Embedded Group
Andrej Kostrov
Отсутствие Дефаулт по моему само собой варнится
Нет, по крайней мере на уровне pedantic.
источник

ED

Electronics Designer in 🎄Embedded Group
Andrej Kostrov
Зато разбирать код с макросами этими даже свой по прошествии времени труднее
Ну, как сказать. Вот, например, фрагмент инициализации FMC с использованием макросов. Здесь они наоборот радикально повышают читаемость кода. Я думаю, что происходит, понятно даже без комментариев.

#define CRL_AF_PP(pin_no,speed)         ((0x08 | (speed))<<((pin_no)*4))
...
#define CRH_AF_PP(pin_no,speed)         ((0x08 | (speed))<<(((pin_no)-8)*4))

...

#define LCD_D2_PD           0
#define LCD_D3_PD           1

#define LCD_D13_PD          8
#define LCD_D14_PD          9

...

#define LCD_CS_NE1_PD       7
#define LCD_RS_A23_PE       2
#define LCD_WR_NWE_PD       5
#define LCD_RD_NOE_PD       4

#define PORTD_CONF_L        (CRL_AF_PP(LCD_D2_PD,SPEED_50M) | \
                            CRL_AF_PP(LCD_D3_PD,SPEED_50M) | \
                            CRL_AF_PP(LCD_CS_NE1_PD,SPEED_50M) | \
                            CRL_AF_PP(LCD_WR_NWE_PD,SPEED_50M) | \
                            CRL_AF_PP(LCD_RD_NOE_PD,SPEED_50M))

#define PORTD_CONF_H        (CRH_AF_PP(LCD_D13_PD,SPEED_50M) | \
                            CRH_AF_PP(LCD_D14_PD,SPEED_50M) | \
                            CRH_AF_PP(LCD_D15_PD,SPEED_50M) | \
                            CRH_AF_PP(LCD_D0_PD,SPEED_50M) | \
                            CRH_AF_PP(LCD_D1_PD,SPEED_50M))

...

GPIOD->CRL = PORTD_CONF_L;
GPIOD->CRH = PORTD_CONF_H;
источник

AK

Andrej Kostrov in 🎄Embedded Group
Короче сошлись на том что энум для свича надо юзать а не макросы
источник

K

Kitnerboy Redoubt in 🎄Embedded Group
Да, он сильно помогает.
источник

AK

Andrej Kostrov in 🎄Embedded Group
Electronics Designer
Ну, как сказать. Вот, например, фрагмент инициализации FMC с использованием макросов. Здесь они наоборот радикально повышают читаемость кода. Я думаю, что происходит, понятно даже без комментариев.

#define CRL_AF_PP(pin_no,speed)         ((0x08 | (speed))<<((pin_no)*4))
...
#define CRH_AF_PP(pin_no,speed)         ((0x08 | (speed))<<(((pin_no)-8)*4))

...

#define LCD_D2_PD           0
#define LCD_D3_PD           1

#define LCD_D13_PD          8
#define LCD_D14_PD          9

...

#define LCD_CS_NE1_PD       7
#define LCD_RS_A23_PE       2
#define LCD_WR_NWE_PD       5
#define LCD_RD_NOE_PD       4

#define PORTD_CONF_L        (CRL_AF_PP(LCD_D2_PD,SPEED_50M) | \
                            CRL_AF_PP(LCD_D3_PD,SPEED_50M) | \
                            CRL_AF_PP(LCD_CS_NE1_PD,SPEED_50M) | \
                            CRL_AF_PP(LCD_WR_NWE_PD,SPEED_50M) | \
                            CRL_AF_PP(LCD_RD_NOE_PD,SPEED_50M))

#define PORTD_CONF_H        (CRH_AF_PP(LCD_D13_PD,SPEED_50M) | \
                            CRH_AF_PP(LCD_D14_PD,SPEED_50M) | \
                            CRH_AF_PP(LCD_D15_PD,SPEED_50M) | \
                            CRH_AF_PP(LCD_D0_PD,SPEED_50M) | \
                            CRH_AF_PP(LCD_D1_PD,SPEED_50M))

...

GPIOD->CRL = PORTD_CONF_L;
GPIOD->CRH = PORTD_CONF_H;
По мне так ужос😉, но это моё субъективное мнение
источник

ED

Electronics Designer in 🎄Embedded Group
Со структурами, в стиле куба, все выглядит еще хуже. :)
источник