реклама на сайте
подробности

 
 
> Вопрос(ы) по коду
Jenya7
сообщение Jun 14 2018, 14:12
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Я тут перевожу чужой код на новую платформу. Встретился такой код
Код
if(g_sPreset[g_uiCounterPush] < g_sPreset_max[g_uiCounterPush])
    g_sPreset[g_uiCounterPush]++;
как компилятор это увидит g_sPreset++ или g_sPreset[g_uiCounterPush++] ?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Forger
сообщение Jun 14 2018, 18:11
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 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) *
По приоритету [] существенно выше чем оператор инкримента.

Это не так, приоритеты у них одинаковые ))
Я тоже так думал, пока не глянул в "табличку" (см. ссылку выше)


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 14 2018, 19:05
Сообщение #3


Универсальный солдатик
******

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



Цитата(Forger @ Jun 14 2018, 21:11) *
Это не так, приоритеты у них одинаковые ))
Я тоже так думал, пока не глянул в "табличку" (см. ссылку выше)

Приоритеты у них разные, а табличка у вас неправильная. rolleyes.gif
Не "существенно выше" sm.gif , а на одну позицию.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 14 2018, 19:12
Сообщение #4


Профессионал
*****

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



Цитата(ViKo @ Jun 14 2018, 22:05) *
Приоритеты у них разные, а табличка у вас неправильная. rolleyes.gif

Значит msdn тоже врет, все врут! Но коли так, покажите свою "правильную" табличку cool.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 15 2018, 04:52
Сообщение #5


Универсальный солдатик
******

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



Цитата(Forger @ Jun 14 2018, 22:12) *
Значит msdn тоже врет, все врут! Но коли так, покажите свою "правильную" табличку cool.gif

Посмотрите у Кернигана с Ричи, и у Шилда в книгах.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 15 2018, 05:01
Сообщение #6


Профессионал
*****

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



Цитата(ViKo @ Jun 15 2018, 07:52) *
Посмотрите у Кернигана с Ричи, и у Шилда в книгах.
Чтобы не быть голословным, приведите сюда конкретные цитаты из этих книг, а конкретно приоритеты оператора постфиксного инкремента ++ и оператора [].


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 15 2018, 07:15
Сообщение #7


Универсальный солдатик
******

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



Цитата(Forger @ Jun 15 2018, 08:01) *
Чтобы не быть голословным, приведите сюда конкретные цитаты из этих книг, а конкретно приоритеты оператора постфиксного инкремента ++ и оператора [].

Я думаю, вы в состоянии самостоятельно полистать книги. Стр. примерно 66 - 69. Для пост- и пре- ++ и - - там нет различий, это, видимо, позже придумали словоблуды (стандартизаторы) и шарлатаны из MS. Кстати, в стандарте что на этот счет?
P.S. в стандарте на C99 я не нашел слова priority
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 15 2018, 10:16
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 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 ))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 15 2018, 10:51
Сообщение #9


Универсальный солдатик
******

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



Цитата(Forger @ Jun 15 2018, 13:16) *
Там используется другой термин: precedence

Я по всякому искал, не нашел. Это удивляет.
P.S. но не очень усердно
Прикрепленные файлы
Прикрепленный файл  C99.pdf ( 1.35 мегабайт ) Кол-во скачиваний: 6
 
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 15 2018, 10:58
Сообщение #10


Профессионал
*****

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



Цитата(ViKo @ Jun 15 2018, 13:51) *
Я по всякому искал, не нашел. Это удивляет.

Увы, в стандарте нет явной precedence table, есть только жалкие крохи, которые еще больше запутывают.
Я пришел к выводу, что каждый компилятор может некоторые нюансы трактовать по-своему. Другими словами стандарт "отдает это на откуп" разработчику компилятора.
Поэтому подобные "мутные дела" лучше проверять на конкретном компиляторе.
Хотя, имхо, правильнее вообще избегать таких мутных дел и писать код более явно, чтобы любой компилятор правильно понял это. Да и читать такой код намного проще ))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 15 2018, 11:38
Сообщение #11


Универсальный солдатик
******

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



Цитата(Forger @ Jun 15 2018, 13:58) *
Хотя, имхо, правильнее вообще избегать таких мутных дел и писать код более явно, чтобы любой компилятор правильно понял это. Да и читать такой код намного проще ))

Это верно. Но я имею таблицу приоритетов в файле, куда складываю "умные мысли", примеры на C (преимущественно с этого сайта). И периодически к ней обращаюсь, чтобы не писать лишних скобок. Увы, наизусть не выучил. Да и не хочу доверять памяти то, что можно доверить компьютеру.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 15 2018, 11:52
Сообщение #12


Профессионал
*****

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



Цитата(ViKo @ Jun 15 2018, 14:38) *
Но я имею таблицу приоритетов в файле, куда складываю "умные мысли",

Вот еще нашел любопытную таблицу: http://www.difranco.net/compsci/C_Operator...dence_Table.htm
Некоторые группы операторов тут имеют приоритет справа-налево, в отличие от большинства остальных групп.

Честно говоря, когда вижу в одном выражении смесь операторов "++/--" вместе с другими операторами, то стараюсь "от греха подальше" разделять их оператором ";" (на другую строку переносить).
Особенно это актуально при работе с указателями (операторы ->, *) - грабли с ними могут быть очень коварные smile3046.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 11:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01592 секунд с 7
ELECTRONIX ©2004-2016