Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Гм. Извиняюсь заранее. Совершенно глупый вопрос по приоритету выполнения операций на Си. Коллега внес сомнения :)
Отправлено
rezident
30 августа 2007 г. 22:11
Выражение типа a/=b+c; чему эквивалентно?
a=a/b+c; или a=a/(b+c);
Я почему-то думал, что первому, а коллега утверждает, что второму.
Составить ответ
|
Вернуться на конференцию
Ответы
Однозначно вариант 2. Приоритеты операторов и правила вычислений однозначно описаны в стандарте. А вот... x = a+++b интересно чем кончится? a+(++b) или (a++)+b ?
—
SM
(30.08.2007 22:59:8
80.92.255.53
,
пустое
)
Буквально вчере букварь от 1990года по С листал... Именно этот пример, ответ 2.
—
Trashy
(31.08.2007 10:20:2
217.29.84.72
,
пустое
)
Верю на слово. Но хочу найти обоснование в стандарте!
—
SM
(31.08.2007 11:55:59
85.21.237.237
,
пустое
)
См. ниже. ISO/IEC 9899:1999 (E) - 6.4, стр. 61-62
—
ReAl
(31.08.2007 12:06:57
89.162.152.53
,
пустое
,
ссылка
)
О! Спасибо.
—
SM
(31.08.2007 13:27:11
85.21.237.237
,
пустое
)
у меня так:
—
LordN
(31.08.2007 00:14:57
217.29.89.98
, 775 байт)
(a++)+b пред и постинкремент имеют одинаковый приоритет, а потому выполнятся с лева на право. ЗЫ x=++a+++++b++ смотрится прикольней :)
—
F8
(30.08.2007 23:12:23
91.124.166.254
,
пустое
)
А причем тут пред- и пост-, и их приоритеты? Тут нет рядом двух операторов пред- и пост-инкремента. Тут рядом двуместный плюс и одноместный какой-то инкремент. Какой-то инкремент выполняется приоритетнее двуместного плюса. А боьшего я не нашел в анси на эту тему.
—
SM
(30.08.2007 23:16:24
80.92.255.53
,
пустое
)
a++ - постикремен, ++a - прединкремент. Обе операции имеют одинаковый приоритет, словательно сначала будет выполниена та что слева. x = a+b; a=a+1;
—
F8
(30.08.2007 23:28:42
91.124.166.254
,
пустое
)
Ссылочку плиз на пункт ANSI. Приоритеты применяются уже после разделения на отдельные операторы. А не до. А тут вопрос к парсеру.
—
SM
(30.08.2007 23:33:6
80.92.255.53
,
пустое
)
Извините ссылку искать не буду, я мнение свое высказал, может оно и ошибочное. Если скажите, что я не прав - поверю на слово. :)
—
F8
(30.08.2007 23:57:32
91.124.166.254
,
пустое
)
Вы были бы правы, если бы речь шла о записи ++a++, в которой рядом есть пост и пре инкременты, относящиеся к одной переменной и тут важны приоритеты, т.е. кто первый. А по той записи - IMHO не правы.
—
SM
(31.08.2007 00:04:57
80.92.255.53
,
пустое
)
:о))) => Error [202] D:\ProjPic\NTO18\nto0402\Nto0402.c; 459.6 only lvalues may be assigned to or modified
—
LordN
(31.08.2007 00:43:29
217.29.89.98
,
пустое
)
Это логично - ни (++a) ни (a++) не является lvalue. Я про принцип, а не про то, что это безошибочная запись.
—
SM
(31.08.2007 00:55:17
80.92.255.53
,
пустое
)
А это, как я понимаю, к разбору входного текста. Насколько помню, где-то там прописано, что выделяется наиболее длинная осмысленная лексема
—
ReAl
(30.08.2007 23:23:7
89.162.152.53
, 157 байт)
А Вы уверены, что он обязан разбирать все слева направо?
—
SM
(30.08.2007 23:36:6
80.92.255.53
,
пустое
)
Когда писал - был не уверен (написал _насколько я помню_) (+)
—
ReAl
(31.08.2007 11:59:36
89.162.152.53
, 1236 байт)
О! Спасибо.
—
SM
(31.08.2007 13:24:40
85.21.237.237
,
пустое
)
любой компилер такую конструкцию обязан воспринять как x=b+c; a/=x; и никак иначе.
—
LordN
(30.08.2007 22:36:47
217.29.89.98
,
пустое
)
второй вариант.ПРОВЕРИЛ
—
Flasher
(30.08.2007 22:33:34
77.235.97.96
,
пустое
)
Коллега прав. Приоритет у /= такой же, как и =
—
K A A
(30.08.2007 22:27:32
85.25.138.222
,
пустое
)
И он прав. Можете в любом симуляторе проверить.
—
F8
(30.08.2007 22:23:39
91.124.166.254
,
пустое
)
А эксперимент не катит?
—
Крок
(30.08.2007 22:22:45
91.76.35.132
,
пустое
)
Угу. Катит. Я ошибался.
—
rezident
(30.08.2007 22:31:53
77.43.137.45
,
пустое
)
Точнее я выражение справа от = в скобки заключал, т.к. сомневался :)
—
rezident
(30.08.2007 22:35:34
77.43.137.45
,
пустое
)
Да, скобок много не бывает :)
—
Vladimir Ljaschko
(30.08.2007 23:17:2
82.209.192.121
,
пустое
)
Ну кому как. Другой мой коллега недавно критиковал программу одного оутсорсера за излишнее (на его взгляд) количество скобок :)
—
rezident
(31.08.2007 00:15:8
77.43.137.45
,
пустое
)
а вот это совершенно правильно! :о)
—
LordN
(30.08.2007 22:37:28
217.29.89.98
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 97:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru