|
|
 |
Ответов
|
Jun 14 2018, 18:11
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Jenya7 @ Jun 14 2018, 17:12)  Я тут перевожу чужой код на новую платформу. Встретился такой код Код if(g_sPreset[g_uiCounterPush] < g_sPreset_max[g_uiCounterPush]) g_sPreset[g_uiCounterPush]++; как компилятор это увидит g_sPreset++ или g_sPreset[g_uiCounterPush++] ? См. приоритеты операторов. Оператор "[]" имеет приоритет, равный приоритету оператора "++". При равных приоритетах работает правило "слева направо". Т.е. сначала выполнится оператор [], а затем ++. Однако, в подобных не очевидных ситуациях, имхо, лучше писать явно: g_sPreset[g_uiCounterPush] = g_sPreset[g_uiCounterPush] + 1; Цитата(k155la3 @ Jun 14 2018, 19:10)  По приоритету [] существенно выше чем оператор инкримента. Это не так, приоритеты у них одинаковые )) Я тоже так думал, пока не глянул в "табличку" (см. ссылку выше)
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 15 2018, 10:16
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(ViKo @ Jun 15 2018, 10:15)  в стандарте на C99 я не нашел слова priority Там используется другой термин: precedence Вот любопытная ссылка: https://www.geeksforgeeks.org/difference-between-p-p-and-p/По сути a[b] есть (*( a + b ))
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 15 2018, 10:58
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(ViKo @ Jun 15 2018, 13:51)  Я по всякому искал, не нашел. Это удивляет. Увы, в стандарте нет явной precedence table, есть только жалкие крохи, которые еще больше запутывают. Я пришел к выводу, что каждый компилятор может некоторые нюансы трактовать по-своему. Другими словами стандарт "отдает это на откуп" разработчику компилятора. Поэтому подобные "мутные дела" лучше проверять на конкретном компиляторе. Хотя, имхо, правильнее вообще избегать таких мутных дел и писать код более явно, чтобы любой компилятор правильно понял это. Да и читать такой код намного проще ))
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 15 2018, 11:38
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Forger @ Jun 15 2018, 13:58)  Хотя, имхо, правильнее вообще избегать таких мутных дел и писать код более явно, чтобы любой компилятор правильно понял это. Да и читать такой код намного проще )) Это верно. Но я имею таблицу приоритетов в файле, куда складываю "умные мысли", примеры на C (преимущественно с этого сайта). И периодически к ней обращаюсь, чтобы не писать лишних скобок. Увы, наизусть не выучил. Да и не хочу доверять памяти то, что можно доверить компьютеру.
|
|
|
|
|
Jun 15 2018, 11:52
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(ViKo @ Jun 15 2018, 14:38)  Но я имею таблицу приоритетов в файле, куда складываю "умные мысли", Вот еще нашел любопытную таблицу: http://www.difranco.net/compsci/C_Operator...dence_Table.htmНекоторые группы операторов тут имеют приоритет справа-налево, в отличие от большинства остальных групп. Честно говоря, когда вижу в одном выражении смесь операторов "++/--" вместе с другими операторами, то стараюсь "от греха подальше" разделять их оператором ";" (на другую строку переносить). Особенно это актуально при работе с указателями (операторы ->, *) - грабли с ними могут быть очень коварные
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
Сообщений в этой теме
Jenya7 Вопрос(ы) по коду Jun 14 2018, 14:12 gosha-z Цитата(Jenya7 @ Jun 14 2018, 17:12) Я тут... Jun 14 2018, 14:14 Jenya7 Цитата(gosha-z @ Jun 14 2018, 19:14)... Jun 14 2018, 14:25  gosha-z Цитата(Jenya7 @ Jun 14 2018, 17:25) я пон... Jun 14 2018, 14:49 Jenya7 еще такой вопрос
в aaa.h файле определено
Код#if... Jun 14 2018, 14:55 gosha-z Цитата(Jenya7 @ Jun 14 2018, 17:55) еще т... Jun 14 2018, 15:00  Jenya7 Цитата(gosha-z @ Jun 14 2018, 20:00)... Jun 14 2018, 15:10   k155la3 Цитата(Jenya7 @ Jun 14 2018, 18:10) а мож... Jun 14 2018, 16:10   aiwa Цитата(Jenya7 @ Jun 14 2018, 18:10) а мож... Jun 15 2018, 09:31 Jenya7 Цитата(Forger @ Jun 15 2018, 00:11) См. п... Jun 14 2018, 18:21  Forger Цитата(Jenya7 @ Jun 14 2018, 21:21) это н... Jun 14 2018, 18:24      Forger Цитата(ViKo @ Jun 15 2018, 10:15) Для пос... Jun 15 2018, 09:35 k155la3 Цитата(Forger @ Jun 14 2018, 21:11) . . .... Jun 15 2018, 07:06 gosha-z Народ, вы чего? Там все однозначно безо всяких тол... Jun 14 2018, 19:36 Forger Цитата(gosha-z @ Jun 14 2018, 22:36)... Jun 14 2018, 19:42 k155la3 ? z1 = ++ms[10] - синтаксис оператора для двух пр... Jun 15 2018, 07:30 ViKo Из Шилдта
ЦитатаOrder of Evaluation
C does not spe... Jun 15 2018, 09:53 Herz Автор! В этом разделе 99% вопросов "по к... Jun 15 2018, 10:42 k155la3 IMHO: Использование постфиксных, и тем более - пре... Jun 15 2018, 10:57 esaulenka Цитата(k155la3 @ Jun 15 2018, 13:57) IMHO... Jun 15 2018, 12:42  k155la3 Цитата(esaulenka @ Jun 15 2018, 15:42) Чт... Jun 15 2018, 14:11   Forger Цитата(k155la3 @ Jun 15 2018, 17:11) Може... Jun 15 2018, 14:35   aiwa Цитата(k155la3 @ Jun 15 2018, 17:11) В да... Jun 15 2018, 20:17    Forger Цитата(aiwa @ Jun 15 2018, 23:17) пример ... Jun 15 2018, 20:21     aiwa Цитата(Forger @ Jun 15 2018, 23:21) Неясн... Jun 15 2018, 21:44      Forger Цитата(aiwa @ Jun 16 2018, 00:44) ...да, ... Jun 15 2018, 21:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|