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

 
 
 
Reply to this topicStart new topic
> Работа со строками
Jenya7
сообщение Jul 24 2018, 12:20
Сообщение #1


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

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



Тема навеяна гневными диффирамбами уважаемого jcxz. Вернемся к тем же баранам
Код
char *s_MainMenu[] =
{
    "MAINT ",
    " AUTO ",
    "MANUAL",
    "FAILS ",
    "MUXBUS"
};

void set_display_state(uint8_t state_val, uint8_t state_maxind, char *words[])
{
    g_DisplayStates.MenuState = state_val;
    g_DisplayStates.MaxStringIndex = state_maxind;
    g_DisplayStates.WordstoDisplay = words;
}
set_display_state(MAIN_STATE,MAX_MAIN_INDEX, s_MainMenu);
я так понял это плохо. а так хорошо?
Код
const char *s_MainMenu[] =
{
    "MAINT ",
    " AUTO ",
    "MANUAL",
    "FAILS ",
    "MUXBUS"
};

void set_display_state(uint8_t state_val, uint8_t state_maxind, const char *words[])


Сообщение отредактировал Jenya7 - Jul 24 2018, 12:25
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 24 2018, 12:57
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



"гневные дифирамбы" - это что-то вроде "сухая вода". В который раз поражаюсь узости вашего кругозора.
QUOTE (Jenya7 @ Jul 24 2018, 15:20) *
а так хорошо?
Да. Если ваша функция принимает значение по указателю и не изменяет значение по этому указателю - всегда нужно объявлять параметр как указатель на константу. Это и вас предохранит от случайного изменения значения, и компилятору даст больше свободы в оптимизации.
А еще лучше будет сделать const char * const s_MainMenu[] = ... Подумайте, почему.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 24 2018, 13:02
Сообщение #3


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

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



Цитата(Сергей Борщ @ Jul 24 2018, 18:57) *
"гневные дифирамбы" - это что-то вроде "сухая вода". В который раз поражаюсь узости вашего кругозора.
Да. Если ваша функция принимает значение по указателю и не изменяет значение по этому указателю - всегда нужно объявлять параметр как указатель на константу. Это и вас предохранит от случайного изменения значения, и компилятору даст больше свободы в оптимизации.
А еще лучше будет сделать const char * const s_MainMenu[] = ... Подумайте, почему.

я понял. спасибо.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 24 2018, 14:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Сергей Борщ @ Jul 24 2018, 15:57) *
Если ваша функция принимает значение по указателю и не изменяет значение по этому указателю - всегда нужно объявлять параметр как указатель на константу. Это и вас предохранит от случайного изменения значения, и компилятору даст больше свободы в оптимизации.

Точно!
Я и член-функции классов, не изменяющие членов класса, тоже в обязательном порядке объявляю с модификатором const. Именно по этом-же причинам.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th April 2024 - 04:51
Рейтинг@Mail.ru


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