|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 14)
|
Jun 14 2018, 14:14
|
Местный
  
Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288

|
Цитата(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++] ? Первое. Что логично.
|
|
|
|
|
Jun 14 2018, 14:49
|
Местный
  
Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288

|
Цитата(Jenya7 @ Jun 14 2018, 17:25)  я понял. спасибо. судя по коду этот п...рограмист хотел таки приращивать g_uiCounterPush. хотя это то же самое. Ээээ... Что "то же самое"?
|
|
|
|
|
Jun 14 2018, 14:55
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
еще такой вопрос в 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 файле? Цитата(gosha-z @ Jun 14 2018, 19:49)  Ээээ... Что "то же самое"? результат будет тот же. мы сместимся на один адрес вперед. .... ах да. ошибся. не то же самое.
Сообщение отредактировал Jenya7 - Jun 14 2018, 15:00
|
|
|
|
|
Jun 14 2018, 15:00
|
Местный
  
Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288

|
Цитата(Jenya7 @ Jun 14 2018, 17:55)  еще такой вопрос в 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" Цитата(Jenya7 @ Jun 14 2018, 17:55)  результат будет тот же. мы сместимся на один адрес вперед. Нет, a[b]++ и a[b++] разные по смыслу
|
|
|
|
|
Jun 14 2018, 16:10
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(Jenya7 @ Jun 14 2018, 18:10)  а можно узнать что имел в виду писавший это? a[b]++ или таки a[b++]  интеллектуалам не понятно. Переписываем a[b]++; в виде a[b] = a[b] +1; По приоритету [] существенно выше чем оператор инкримента.
|
|
|
|
|
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 14 2018, 18:21
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(Forger @ Jun 15 2018, 00:11)  См. приоритеты операторов. Оператор "[]" имеет приоритет, равный приоритету оператора "++". При равных приоритетах работает правило "слева направо". Т.е. сначала выполнится оператор [], а затем ++. Однако, в подобных не очевидных ситуациях, имхо, лучше писать явно: g_sPreset[g_uiCounterPush] = g_sPreset[g_uiCounterPush] + 1; Это не так, приоритеты у них одинаковые )) Я тоже так думал, пока не глянул в "табличку" (см. ссылку выше) это не я писал. писал начинающий програмист. я не знаю что он имел ввиду. но сдается мне он далек от таких изысков g_sPreset[g_uiCounterPush] = g_sPreset[g_uiCounterPush] + 1;хотя...черт его душу разберет...
|
|
|
|
|
Jun 14 2018, 19:42
|

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

|
Цитата(gosha-z @ Jun 14 2018, 22:36)  Народ, вы чего? И то верно  Честно говоря, я решил, что речь идет про трактовку компилятором g_sPreset[g_uiCounterPush]++: либо (g_sPreset[g_uiCounterPush])++ либо (g_sPreset++)[g_uiCounterPush]. Если все же по теме, то ясен пень, что сначала выполнится то, что внутри оператора [ ], а потом и сам оператор [].
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|