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

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

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

byte result = bit_flag ? 10u : 20u;

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

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

ostream & sout = err ? cerr : cout;

Можно тут как-то без него?
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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:50 am
Powered by Dreamwidth Studios