-pedantic-errors -Wall -Wextra
Форум программистов «Весельчак У» |
|
Начало | Помощь | Поиск | Календарь | Почта | Войти | Регистрация |
11
: 09-02-2024 08:41
|
||
Автор Boriska - Последний ответ от Алексей++ | ||
Boriska, добавь компилятору три таких флага. Удивишься
-pedantic-errors -Wall -Wextra |
12
: 09-02-2024 08:11
|
||
Автор Boriska - Последний ответ от Boriska | ||
Цитата так содержимое переменной char s смотри Улыбаюсь А не размер. С размером то всё понятно но вякнуть же полагается, ну хоть ворнингом.содержимое будет обрезанное (хех) |
13
: 09-02-2024 07:46
|
||
Автор Boriska - Последний ответ от Алексей++ | ||
>>да обрезало
так содержимое переменной char s смотри А не размер. С размером то всё понятно содержимое будет обрезанное (хех) |
14
: 09-02-2024 07:13
|
||
Автор Boriska - Последний ответ от Boriska | ||
да обрезало. И ни слова предупреждений. Символ то двухбайтовый. Вот интересно, когда int в byte то обязательно поругается, а тут нет.
не доработка однако. И в примере с массивом, тоже не ругнулось, массив char и размер его известен, а мы суем туда char но уже двубайтовый. https://drive.google.com/file/d/1Or09vx6jxe1T9dtr935sRRyr1UdN8yE0/view?usp=sharing |
15
: 08-02-2024 13:59
|
||
Автор Boriska - Последний ответ от Алексей++ | ||
Boriska,
char a[] = {'Б'}; - это массив размером в 1 элемент. Литерал 'Б', какой бы он длины не был, обрежется до charа "ББ" - это строковый литерал. Это массив типа const char [размер] |
16
: 08-02-2024 13:11
|
||
Автор Boriska - Последний ответ от Boriska | ||
Я собственно зацепился с эти почему
Цитата Boriska, литерал "ББ" в файле с кодировкой UTF8 (суть - массив типа const char[5] ) будет содержать 2 байта под 'Б' 2 байта под 'Б' 1 байт под '\0' итого - 5 язык С, создается массив, вычисляется размер 2 chara (sizeof(char)=1 в С), по идее получается конфликт, вычислено надо две ячейки выделено по две на символ. На каком таком этапе подмена понятий ? (забудем что это строка), напишем char a[] = {'a'}; должно выделится одна ячейка, один же символ, и sizof говорит одну, а выделит 2. Какая то не стыковка С и современных кодировок. Это при Ричи символы были по байту, а нынче погдяди в окно, под голубыми небесам великолепными коврами...По идее тогда sizeof в наше время уже не совсем то...Может я че не то горожу ? |
17
: 08-02-2024 11:07
|
||
Автор Boriska - Последний ответ от Алексей++ | ||
Boriska, литерал "ББ" в файле с кодировкой UTF8 (суть - массив типа const char[5] ) будет содержать
2 байта под 'Б' 2 байта под 'Б' 1 байт под '\0' итого - 5 если версия языка позволяет, то проверить можно на этапе компиляции: Код: static_assert(sizeof s == 5); Добавлено через 4 минуты и 50 секунд: можно сделать отдельный файл *.c в нужной кодировке, там определить массив (название только надо бы более говорящее) //some.c - этот файл в нужной кодировке, к примеру 1251 const char s[3]="ББ"; а в нужных местах (в файлах, где нужно видеть переменную) делать объявление: Код: extern const char s[3]; Добавлено через 4 минуты и 18 секунд: собственно, чего это я. Ведь размер указывать придётся явно - это неудобно если версия языка позволяет, то можно применить std::string_view либо в заголовочнике эту переменную разместить, но добавить перед ней inline |
18
: 08-02-2024 10:47
|
||
Автор Boriska - Последний ответ от Boriska | ||
Ссылку перебил. Пробуйте.
|
19
: 08-02-2024 09:25
|
||
Автор Boriska - Последний ответ от RXL | ||
Символ в UTF-8 — это последовательность, от 1 до 4 байт.
|
20
: 08-02-2024 09:25
|
||
Автор Boriska - Последний ответ от Алексей++ | ||
Boriska, там логин какой-то просят
|