C - Чтение _Bool после его установки с помощью memset undefined, реализация определена?

Насколько я понимаю, в стандарте ISO C нет ничего, что на самом деле закрепило бы представление _Bool, но там сказано:

  • "_Bool достаточно большой, чтобы вместить значения 0 и 1"
  • «Когда любое скалярное значение преобразуется в _Bool, результат равен 0, если значение сравнивается равным 0; в противном случае результат равен 1»
  • "количество битов в _Bool не менее CHAR_BIT, ширина _Bool может быть всего 1 бит"

Тогда я думаю (и из других связанных ответов), что представление false на самом деле не обязательно должно быть 0 (хотя почти во всех реализациях это так). Итак, что произойдет, если вы установите memset _Bool в 0, а затем как-то его используете? Это неопределенное поведение (по умолчанию, потому что оно не определено в стандарте) или поведение, определенное реализацией? Это кажется важным (в моем понимании), потому что в первом случае это не четко определенная программа на C, а во втором - так. Например, это неопределенное поведение? Может ли false иметь представление, отличное от 0?

      #include <stdbool.h>

//...

bool x = true;

memset(&x, 0, sizeof(bool));

if(x == true)
{
    printf("Zero is true!");
}
else
{
    printf("zero is false!");
}

0 ответов

Другие вопросы по тегам