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!");
}