Перейти к содержанию
    

Не могу объявить нулевой указатель на функцию

11 минут назад, Forger сказал:

в плюсах выходит sizeof('A') = 1, неужели в С больше? :shok:

Разумеется, да (по крайней мере потому, что сей "банальный" прикол тут приписали)😀

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, Arlleex said:

Разумеется, да

дичь :shok: 

все таки я рад, что в голом С давно ничего не пишу, максимум использую чужое как есть, в исходном виде

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, Forger сказал:

дичь :shok: 

Вот потому это хоть и похожие, но разные языки, пусть и имеющие одни корни, но "в тупую" переназывать расширения файлов .c -> .cpp - весьма опрометчиво.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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')

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 байта, и пример абсолютно не противоречит законам природы:wink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

43 minutes ago, Arlleex said:

Это не кодировки такие, это стандарт языка вполне однозначно определяет, что символьные литералы (вот этот самый 'A') имеет тип int, а не char, как в C++.

вот тебе и обратная совместимость 🤦‍♂️

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...