jenya7 0 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба Я тут перевожу чужой код на новую платформу. Встретился такой код if(g_sPreset[g_uiCounterPush] < g_sPreset_max[g_uiCounterPush]) g_sPreset[g_uiCounterPush]++; как компилятор это увидит g_sPreset++ или g_sPreset[g_uiCounterPush++] ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба Я тут перевожу чужой код на новую платформу. Встретился такой кодif(g_sPreset[g_uiCounterPush] < g_sPreset_max[g_uiCounterPush]) g_sPreset[g_uiCounterPush]++; как компилятор это увидит g_sPreset++ или g_sPreset[g_uiCounterPush++] ? Первое. Что логично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 июня, 2018 Опубликовано 14 июня, 2018 (изменено) · Жалоба Первое. Что логично. я понял. спасибо. судя по коду этот п...рограмист хотел таки приращивать g_uiCounterPush. хотя это то же самое. Изменено 14 июня, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба я понял. спасибо. судя по коду этот п...рограмист хотел таки приращивать g_uiCounterPush. хотя это то же самое. Ээээ... Что "то же самое"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 июня, 2018 Опубликовано 14 июня, 2018 (изменено) · Жалоба еще такой вопрос в aaa.h файле определено #if _MENU_C char *s_MainMenu[] = { "MAINT ", " AUTO ", "MANUAL", "FAILS ", }; #else extern char *s_MainMenu[]; #endif а в aaa.c файле #define _MENU_C есть шанс что дефайн будет виден в aaa.h файле? Ээээ... Что "то же самое"? результат будет тот же. мы сместимся на один адрес вперед. .... ах да. ошибся. не то же самое. Изменено 14 июня, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба еще такой вопрос в aaa.h файле определено #if _MENU_C char *s_MainMenu[] = { "MAINT ", " AUTO ", "MANUAL", "FAILS ", }; #else extern char *s_MainMenu[]; #endif а в aaa.c файле #define _MENU_C есть шанс что дефайн будет виден в aaa.h файле? Да, в случае #define _MENU_C #include "aaa.h" результат будет тот же. мы сместимся на один адрес вперед. Нет, a++ и a[b++] разные по смыслу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба Да, в случае #define _MENU_C #include "aaa.h" Нет, a++ и a[b++] разные по смыслу а можно узнать что имел в виду писавший это? a++ или таки a[b++] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба а можно узнать что имел в виду писавший это? a++ или таки a[b++] :) интеллектуалам не понятно. Переписываем a++; в виде a = a +1; По приоритету [] существенно выше чем оператор инкримента. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба Я тут перевожу чужой код на новую платформу. Встретился такой код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; По приоритету [] существенно выше чем оператор инкримента. Это не так, приоритеты у них одинаковые )) Я тоже так думал, пока не глянул в "табличку" (см. ссылку выше) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба См. приоритеты операторов. Оператор "[]" имеет приоритет, равный приоритету оператора "++". При равных приоритетах работает правило "слева направо". Т.е. сначала выполнится оператор [], а затем ++. Однако, в подобных не очевидных ситуациях, имхо, лучше писать явно: g_sPreset[g_uiCounterPush] = g_sPreset[g_uiCounterPush] + 1; Это не так, приоритеты у них одинаковые )) Я тоже так думал, пока не глянул в "табличку" (см. ссылку выше) это не я писал. писал начинающий програмист. я не знаю что он имел ввиду. но сдается мне он далек от таких изысков g_sPreset[g_uiCounterPush] = g_sPreset[g_uiCounterPush] + 1;хотя...черт его душу разберет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба это не я писал. писал начинающий програмист А сам этот "программист" куда-то пропал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба Это не так, приоритеты у них одинаковые )) Я тоже так думал, пока не глянул в "табличку" (см. ссылку выше) Приоритеты у них разные, а табличка у вас неправильная. :rolleyes: Не "существенно выше" :) , а на одну позицию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба Приоритеты у них разные, а табличка у вас неправильная. :rolleyes: Значит msdn тоже врет, все врут! Но коли так, покажите свою "правильную" табличку B) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба Народ, вы чего? Там все однозначно безо всяких толкований. a[b++] - инкрементим индекс, не трогая элемент массива, a++ - инкрементим элемент, не трогая индекс. Любой другой вариант уже начинает попахивать нарушением MISRA C Rule 12.2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 14 июня, 2018 Опубликовано 14 июня, 2018 · Жалоба Народ, вы чего? И то верно :blink: Честно говоря, я решил, что речь идет про трактовку компилятором g_sPreset[g_uiCounterPush]++: либо (g_sPreset[g_uiCounterPush])++ либо (g_sPreset++)[g_uiCounterPush]. :blush: Если все же по теме, то ясен пень, что сначала выполнится то, что внутри оператора [ ], а потом и сам оператор []. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться