- 1
- 2
- 3
- 4
- 5
void somefunc(bool val)
{
assert(0 == val || 1 == val);
...
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+83
void somefunc(bool val)
{
assert(0 == val || 1 == val);
...
}
Многоуровневый говнокод. Во первых, индусское сравнение задом наперед. Во вторых, выражение в ассерте всегда истенно. Когда GCC возбухнул по этому поводу, то код был за-#ifdef-ен, но оставлен для других менее умных компиляторов.
3.14159265 11.08.2012 17:27 # +6
Недавно на си-подобных языках начал писать, да?
alexzak 12.08.2012 03:03 # 0
Yakakashko 11.08.2012 17:32 # +4
сильно..
bormand 11.08.2012 17:38 # +4
bormand 11.08.2012 17:41 # +4
Возможно данный код был портирован с Си, где вместо bool использовали int, и проверяли этот самый инт на допустимые значения. При портировании int превратился в bool, а assert убрать забыли.
0 == val не говно, а способ избежать глупой ошибки на старых компиляторах, которые не умели выдавать предупреждение о попутанных = и ==.
P.S. Кстати в assert это предупреждение и сейчас не выдается ;) Только в if/while и им подобных.
alexzak 12.08.2012 03:05 # 0
И все-таки 0 == val - это говно!
bormand 12.08.2012 08:06 # +1
Abbath 11.08.2012 17:42 # +3
3.14159265 11.08.2012 18:02 # +3
Abbath 11.08.2012 18:14 # +2
3.14159265 13.08.2012 13:14 # +1
guest 11.08.2012 17:48 # +1
Если C и bool - тупо typedef unsigned char bool, то да - может и есть смысл.
А то был у нас проект для embedded железяки - там кто что хотел, то и дефайнил как TRUE, но FALSE всегда был 0. И это порождало столько проблем, что в конечном итоге это привело к добавлению в стиль кодирования условия, говорившего что с TRUE в логических выражения сравнивать ни в каком случае нельзя - надо выражения выстраивать так чтоб сравнивалось с FALSE.
Ну пусть даже у ОПа такая запущенная ситуация, но почему было не сделать макрос IS_BOOL(var) ?
bormand 11.08.2012 17:55 # +3
Вот за сравнение чего-либо с TRUE и FALSE (да и true и false) нужно убивать. Это же типичный бульшит...
3.14159265 11.08.2012 18:02 # +2
bormand 11.08.2012 18:04 # +2
> там кто что хотел, то и дефайнил как TRUE
> но FALSE всегда был 0
При таких условиях работать будет без проблем.
3.14159265 11.08.2012 18:05 # 0
vistefan 12.08.2012 12:32 # 0
A_P_Suslikov 25.08.2021 00:54 # 0