febb: (Default)
[personal profile] febb
Еще вдогонку. На языке Си есть тернарный оператор ?:
"Программисты старой закалки" его помнят и с некоторым апломбом используют.
Дескать смотрите, сосунки, как надо круто писать.
Признаюсь есть и у меня такой мелкий грех, следующий по градации после
"накричал на канарейку".

Оказывается в некоторых случаях за это надо бить штангенциркулем по рукам!
Например обнаружил что в 8-битном микроконтроллере этот оператор съедает
после компиляции байтов на 20 больше, чем кондовый if-else.
Как там у Довлатова, 20 байт - "да это уже совсем другая жизнь, старик!". :)
Т.е. когда флеш память размером 1К, 20 байт просто так профукать - это
позор. Настоящий полковник просто должен выйти и пустить себе пулю.
Куда-нибудь.

Наверное это связано с тем, что код типа:

byte result = bit_flag ? 10u : 20u;

Компилятор, не парясь, правую часть реализует как int, а уже потом округляет до байта.
Как известно этот оператор может возвращать разные типы. По этой причине
видимо компилятор не может оптимизировать такие выражения по типу в правой части и выражение
вычисляется как есть. Обычно это незаметно, но надо помнить
что в смысле оптимизации кода этого оператора надо избегать.

Но иногда к примеру в С++ когда инициализируется ссылка, его вроде как нельзя избежать:

ostream & sout = err ? cerr : cout;

Можно тут как-то без него?

Profile

febb: (Default)
febb

March 2022

S M T W T F S
  1 2 345
6 7 89 101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 10th, 2026 04:48 am
Powered by Dreamwidth Studios