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

 
 
> Объясните почему именно const char в string.h, Зачем обязательно const
kolobochishe
сообщение Apr 11 2012, 04:51
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Попробовал поискать ответ на вопрос в инете, но чего-то не нашел.

Работаю со строками в своей программе: названия файлов, расширения и прочее. Все массивы-строки объявляю как unsigned char (ну или просто char. Наверно, не принципиально)
В IAR'е есть стандартная библиотека <string.h>. Почему все функции используют именно const char * а не просто char * в качестве параметров?

Например:

strcmp

int strcmp(const char *s1, const char *s2);


Собственно, все работает и так нормально, но надоели warning'и компилятора. Не зря же он предупреждает
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kolobochishe
сообщение Apr 11 2012, 06:39
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Текст предупреждения:

Warning[Pe167]: argument of type "unsigned char *" is incompatible with parameter of type "char const *"
C:\ÐÀÁÎÒÀ\ÐÀÇÐÀÁÎÒÊÈ\ÏÐÎÅÊÒÛ\ÄÐÀÊÎÍ\Áàçà\Ïðîøèâêà\LPC3250 GUI_RTOS\arm\PowerPac\BoardSupport\NXP\LPC3250\Application\DeviceMenu.c 1103


Пример:

Код
unsigned char Buffer1[MaxFileNameSym], Buffer2[MaxFileNameSym], Buffer0[10];
...

...
if ((n == 2) || (n == 0)) GUI_DispStringAt(Buffer2, 20, 40);


Что такое тулчейн? sm.gif Вообще для IAR для ARM.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 11 2012, 07:05
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(kolobochishe @ Apr 11 2012, 09:39) *
Что такое тулчейн? sm.gif Вообще для IAR для ARM.
понятно. оно и есть.

а так (без unsigned)?
Код
char Buffer1[MaxFileNameSym], Buffer2[MaxFileNameSym], Buffer0[10];


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
kolobochishe
сообщение Apr 11 2012, 08:02
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Цитата(demiurg_spb @ Apr 11 2012, 12:05) *
а так (без unsigned)?
Код
char Buffer1[MaxFileNameSym], Buffer2[MaxFileNameSym], Buffer0[10];


без unsigned все замечательно sm.gif а я на const подумал. просто у меня вся передача данных идет через буфер типа unsigned char и я как-то по инерции и строки под него также объявил. Посчитал что char и unsigned char - это одно и то же. неопределенность в знаке на усмотрение компилятора - это как-то нехорошо. Как вообще кодировка символов может быть со знаком? sm.gif

Цитата(Сергей Борщ @ Apr 11 2012, 12:26) *
Если же речь идет о байте - то unsigned либо signed char, а еще лучше - (u)int(_fast)8_t из stdint.h


(u)int(_fast)8_t из stdint.h - это наверно для того, чтобы в случае изменения стандарта и изменения размера char с 1 байта на 2, например, старые программы тоже работали?

Наверно много чего перестанет работать, если такое случится. По крайней мере, из того что написал я sad.gif
Go to the top of the page
 
+Quote Post



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

 


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


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