Если прогуливать уроки физики в школе, то мир наполнится магией и волшебством Точно так же, если не читать стандарты на язык программирования. Ключевые слова "Integer Promotions".
Значит, OKF прав, а я - нет. Поставим ему плюсик... И всё же, я предпочту явное приведение неявному. И кучу скобок. Возможно, ресурс клавиатуры при этом сокращается, но зато в разы меньше проявляется ошибок, чем когда писал в стиле "тут и ежу понятно". И я точно помню, что когда-то давно сталкивался с отсутствием расширяющегося приведения операндов при сдвиге. Увы, не смог вспомнить, где.
Давненько не писал на Си, а для МК - вообще никогда. Но заинтересовала эта конструкция. Следуя K & R, насколько я их помню, едино что приходит на ум - процедура c с парамеиром d . Но это, конечно, не так?
Это точно не процедура, в С тупо нет процедур, а есть функции. А c(d) может быть как вызовом функции, так и макросом или даже приведением типа. Всё зависит от того что есть c.
Если прогуливать уроки физики в школе, то мир наполнится магией и волшебством Точно так же, если не читать стандарты на язык программирования. Ключевые слова "Integer Promotions".
Да. Люблю волшебство.) Ну а беда в том что стандарт не определяет последовательность вычисления операндов: Except where noted, evaluations of operands of individual operators and of subexpressions of individual expressions are unsequenced ... The value computations of the operands of an operator are sequenced before the value computation of the result of the operator. If a side effect on a memory location (4.4) is unsequenced relative to either another side effect on the same memory location or a value computation using the value of any object in the same memory location, and they are not potentially concurrent (4.7) , the behavior is undefined (ISO/IEC 14882:2017 разд. 4.6(17) стр. 14)
Последовательность вычисления не может перепрыгнуть через приоритеты операций и не меняет разрядность вычислений. В выражениях без побочных эффектов непринципиальна.
В примере к WCH RISC-V встретилась любопытная конструкция:
Код:
GPIO_WriteBit(GPIOD, GPIO_Pin_0, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
Мне казалось, что аргументом функции должен стать результат одного из результатов тернарной операции, но это не так (да и он всегда истинен) Тут тоже как-то хитро работает приоритетность?
результат присваивания i = x; По крайней мере, если слегка ошибиться и написать if (i = x), то у меня было когда-то, что это принималось за истину, и даже где-то читал описание, что в данном случае условие всегда истинно. Ща проверю.
Добавлено after 3 minutes 41 second: ага, здесь точно также, условие определяется итоговым значением переменной. класс. ещё одно моё заблуждение... Z_h_e, спасибо за вопрос.
Последний раз редактировалось Martian Пт июн 07, 2024 13:37:47, всего редактировалось 1 раз.
если слегка ошибиться и написать if (i = x), то у меня было когда-то, что это принималось за истину, и даже где-то читал описание, что в данном случае условие всегда истинно.
На Хабре недавно была статья, что почти все компиляторы стали выдавать предупреждение на присваивание в условии.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Всем доброго Подскажите по масками, точнее как записать в порт, в младшие байты, не изменив старших.?? Временная переменная tempo Переменная с данными Х
Код:
tempo=( (X>>4) & 0x0F); PORT |=tempo; .. ... tempo= (X & 0x0F); PORT |=tempo; ... ...
В итоге собственно ничегошеньки не получается. (применяется для инициализации и записи в жки). Не работает ни в протеус'е, ни на макете. При прямой записи вида
Очень удобно: написать код, которому отдельный толмач нужен. Видимо, про веревку для выстрела в ногу нынче читать не модно... Перед функцией написать x = ! x и потом передать х в функцию (т.е. написать так, что даже умственно неполноценный разберется) - это не куто...
В принципе, чтобы прослыть крутым программистом, достаточно обфускатор скачать.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения