нету справочника под рукой. Если есть выражение if (a && b), то каков порядок вычисления истинности а и b ? Если одно из них ложно, то будет ли вычисляться второе ?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
DASM
10 декабря 2004 г. 14:51
Составить ответ
|||
Конференция
|||
Архив
Ответы
а в шелах (*них) такой оператор обозначает выполнение второго оператора если выполнен первый. собственно в С тоже так можно (если без if)
—
yes
(10.12.2004 17:03, 70 байт)
Ответ: IAR
—
MALLOY
(10.12.2004 16:11, 218 байт)
В C99 - прописано
—
Yuriy
(10.12.2004 15:20, 568 байт)
А я что говорил ! :P
—
miv
(10.12.2004 15:31,
пустое
)
во. А ИАР похоже об этом не знал. Ладно проверим
—
DASM
(10.12.2004 15:26,
пустое
)
Как это не знал? У ИАРа Для АВРа все в порядке
—
!!
(10.12.2004 16:48,
пустое
)
Вот именно, так было всегда.
—
Bill
(10.12.2004 15:22,
пустое
)
Но в некоторых компиляторах есть опция типа "complete boolean evaluation"
—
CD_Eater
(10.12.2004 15:28,
пустое
)
Да, есть. Например, для Паскаля или Фортрана. Я такую опцию ыидел в Delphi. Но не для Си.
—
Bill
(10.12.2004 16:05,
пустое
)
Так и думал, что Си - ацтой !
—
CD_Eater
(10.12.2004 16:34,
пустое
)
Пишите на Паскале, если Си не нравится.
—
Bill
(10.12.2004 20:39,
пустое
)
Юзаю ASM и Delphi. Но для МК иногда приходится на Си (правда, редко, только когда необходимо подключать чужие библиотеки)
—
CD_Eater
(10.12.2004 20:45,
пустое
)
Гы ! Вот пусть негры типа Паскаль, Фортран и работают :))
—
miv
(10.12.2004 16:43,
пустое
)
Выражения такого типа вычисляются слева направо. Если результат вычисления первого выражения
—
Bill
(10.12.2004 15:19, 76 байт)
Зависит от компилера и процессора (+)
—
SM
(10.12.2004 14:58, 259 байт)
неужели ANSI стандарт это не оговаривает ? А то я кажется на side effect попал :-(
—
DASM
(10.12.2004 15:00,
пустое
)
вроде не оговаривает (+)
—
SM
(10.12.2004 15:06, 162 байт)
А по моему оговаривает слева на право, правда не уверен, а вот то что его до конца вычислять нужно, тем более при включёной оптимизации это врядли.
—
miv
(10.12.2004 15:19,
пустое
)
А если скобки поставить ? :)
—
SM
(10.12.2004 15:21,
пустое
)
Ты вот лучше ответь сработает или нет ? ;-) -->
—
miv
(10.12.2004 15:27, 142 байт)
Чёрт сожрало. -->
—
miv
(10.12.2004 15:29, 142 байт)
чего в чем переставляет ?
—
DASM
(10.12.2004 15:37,
пустое
)
Байты в словах местами меняет.
—
miv
(10.12.2004 15:45,
пустое
)
Так они там есть ! ;-)
—
miv
(10.12.2004 15:23,
пустое
)
Я какому-то компилеру дал while(1){...} с включенной оптимизацией, так он действительно единицу с нулём сравнивал :)
—
kolja
(10.12.2004 15:14,
пустое
)
Это может быть сколько угодно.
—
Bill
(10.12.2004 15:21,
пустое
)
Понятно что у каждого оптимизатора свои правила, но всё равно прикольно. Из процов с которыми я имел дело, самые толковые компиляторы, на мой взгляд, это у ARM и BlackFin. Для последнего можно даже аппаратные счётчики использовать и циклические буфера.
—
kolja
(10.12.2004 15:30,
пустое
)
Я, например, анализировал и такие выражения: while (0) {...} :))) Или if (1) {...}
—
Bill
(10.12.2004 16:13, 115 байт)
Самая сила - это С для C6000. Так заворачивает, что и с пол-литрой потом не въедешь, как это работает!
—
SM
(10.12.2004 15:36,
пустое
)
Да и для С5402 тоже нехило ! :))
—
miv
(10.12.2004 15:48, 111 байт)
Бог миловал, но наслышался про него :)
—
kolja
(10.12.2004 15:44,
пустое
)
неее... интельские компиляторы под пеньки - вот это сила. Он мне как-то цикл на 1000 итераций разбил на 10 итераций в цикле, в каждом из них 100 инлайновых вычислений. в 6 раз быстрее микрософтовского летало
—
DASM
(10.12.2004 15:34,
пустое
)
Дык обычно делают for(;;) ;-)
—
miv
(10.12.2004 15:17,
пустое
)
Так после этого и делаю :)
—
kolja
(10.12.2004 15:21,
пустое
)
что за ээффект???
—
ы
(10.12.2004 15:04,
пустое
)
типа (+)
—
Ken@t
(10.12.2004 15:38, 145 байт)
во первых плохой тон так писАть а во вторых ну проверит...и хрен с ним...если в проце 0->A не вызовет исключительную ситуацию что маловеротяно то протянет
—
ы
(10.12.2004 15:56,
пустое
)
у меня еще хуже, одно из условий - функция, вызов которой меняет состояние буфера. И если условие A не выполнено, то В НЕЛЬЗЯ даже и проверять
—
DASM
(10.12.2004 15:55,
пустое
)
нефиг извращаться...сравнивай последовательно
—
ы
(10.12.2004 15:58,
пустое
)
не могу. Просто я... извращенец :")
—
DASM
(10.12.2004 16:05,
пустое
)
ну я в курсе))
—
ы
(10.12.2004 16:07,
пустое
)
Зависит от компилятора. У некоторых есть опции на этот счёт, по умолчанию обычно вычисление булевых выражений происходит по сокращённой схеме
—
CD_Eater
(10.12.2004 14:56,
пустое
)
Я думаю что от оптимизатора зависит
—
kolja
(10.12.2004 14:55,
пустое
)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru