- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
#include <stdio.h>
int main() {
bool a = 0;
printf("%d\n", sizeof(a)); // 1
(*(char*)&a) = 'a';
printf("%c\n", a); // говно, wtf?
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−11
#include <stdio.h>
int main() {
bool a = 0;
printf("%d\n", sizeof(a)); // 1
(*(char*)&a) = 'a';
printf("%c\n", a); // говно, wtf?
}
Где мое говно?
с точки зрения спамеров, на говнокоде спамить бесполезно и опастно. в лучшем случае народ просто проигнорирует спам. в худшем - нарвутся на скучающего скрипткидди.
Кстати, ещё одна из причин, по которой владельцы сайтов запрещают ссылки: если количество исходящих ссылок в разы перевалит количество входящих, Яндекс может обнулить ТИЦ и понизить сайт в результатах поиска.
*****
А на любом сайте для программистов публиковать ссылки и правда опасно. Кто-то может не полениться и найти все дырки на рекламируемом сайте.
p.s. вообще, конечно, бул тут может элементарно тайпдефиться.
http://ideone.com/CG6ey8
Правда можно ещё в stdio.h поднасрать :)
Конпелируем:
ВПЗД ПРГМРВАНЕ
С ключами -O1, -O2 etc. компилятор сразу пишет в bool единицу, поскольку даже не предполагает, что в этот тип может поместиться что-нибудь кроме 0 и 1.
Таким образом, в bool мы можем гарантировать значение только младшего бита.
в
Ничего мы не можем гарантировать, это UB, вроде как. По крайней мере я в стандарте не нашёл внутреннего представления була, на которое можно опираться.
> младшего бита
Скорее тупо 0 и не 0.
1. Ноль и не ноль. Тогда 2 == true.
2. Учитывается только младший бит. Тогда 2 == false.
Получается, что писать любое значение, кроме true и false, это выстрел в ногу.
неочевидно
> неоднозначность может быть вызвана лишь порядком байтов в многобайтовом числе
очевидно
http://govnokod.ru/18828#comment300167