dimka76 62 20 февраля Опубликовано 20 февраля · Жалоба On 2/20/2024 at 10:26 PM, Forger said: неужели в С больше? В СИ так sizeof('A') = sizeof(int) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 20 февраля Опубликовано 20 февраля · Жалоба 11 минут назад, Forger сказал: в плюсах выходит sizeof('A') = 1, неужели в С больше? Разумеется, да (по крайней мере потому, что сей "банальный" прикол тут приписали)😀 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 20 февраля Опубликовано 20 февраля · Жалоба 3 minutes ago, Arlleex said: Разумеется, да дичь все таки я рад, что в голом С давно ничего не пишу, максимум использую чужое как есть, в исходном виде Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 20 февраля Опубликовано 20 февраля · Жалоба 13 минут назад, Forger сказал: дичь Вот потому это хоть и похожие, но разные языки, пусть и имеющие одни корни, но "в тупую" переназывать расширения файлов .c -> .cpp - весьма опрометчиво. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvppvv 0 21 февраля Опубликовано 21 февраля · Жалоба 8 hours ago, dimka76 said: В СИ так sizeof('A') = sizeof(int) Какие у вас тут любопытные споры... :)) В Си IAR AVR так и есть, да. Наверное, это установка по умолчанию, ведь кодировка символа сейчас зачастую двухбайтная. Если использовать ASCII-таблицу для байта, то никаких двусмысленностей нет: 216 char CH = 'A'; 217 PORTC = sizeof('A'); \ 00000000 E002 LDI R16, 2 \ 00000002 B908 OUT 0x08, R16 218 PORTB = sizeof(CH); \ 00000004 E001 LDI R16, 1 \ 00000006 B905 OUT 0x05, R16 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 21 февраля Опубликовано 21 февраля · Жалоба On 2/21/2024 at 6:48 AM, vvppvv said: Какие у вас тут любопытные споры... :)) В Си IAR AVR так и есть, да. Наверное, это установка по умолчанию, ведь кодировка символа сейчас зачастую двухбайтная. Если использовать ASCII-таблицу для байта, то никаких двусмысленностей нет: 216 char CH = 'A'; 217 PORTC = sizeof('A'); \ 00000000 E002 LDI R16, 2 \ 00000002 B908 OUT 0x08, R16 218 PORTB = sizeof(CH); \ 00000004 E001 LDI R16, 1 \ 00000006 B905 OUT 0x05, R16 sizeof(CH) = sizeof(char) sizeof(char) != sizeof('A') Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 21 февраля Опубликовано 21 февраля · Жалоба 2 часа назад, vvppvv сказал: Какие у вас тут любопытные споры... :)) В Си IAR AVR так и есть, да. Наверное, это установка по умолчанию, ведь кодировка символа сейчас зачастую двухбайтная. Если использовать ASCII-таблицу для байта, то никаких двусмысленностей нет: 216 char CH = 'A'; 217 PORTC = sizeof('A'); \ 00000000 E002 LDI R16, 2 \ 00000002 B908 OUT 0x08, R16 218 PORTB = sizeof(CH); \ 00000004 E001 LDI R16, 1 \ 00000006 B905 OUT 0x05, R16 Это не кодировки такие, это стандарт языка вполне однозначно определяет, что символьные литералы (вот этот самый 'A') имеет тип int, а не char, как в C++. У AVR int занимает 2 байта, и пример абсолютно не противоречит законам природы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 21 февраля Опубликовано 21 февраля · Жалоба 43 minutes ago, Arlleex said: Это не кодировки такие, это стандарт языка вполне однозначно определяет, что символьные литералы (вот этот самый 'A') имеет тип int, а не char, как в C++. вот тебе и обратная совместимость 🤦♂️ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться