- 1
- 2
- 3
- 4
- 5
- 6
- 7
#import <Foundation/Foundation.h>
int main () {
BOOL b1 = 71151208, b2 = 107155712;
printf ("b1 is %s; b2 is %s.", (b1 ? "true" : "false"), (b2 ? "true" : "false"));
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−98
#import <Foundation/Foundation.h>
int main () {
BOOL b1 = 71151208, b2 = 107155712;
printf ("b1 is %s; b2 is %s.", (b1 ? "true" : "false"), (b2 ? "true" : "false"));
return 0;
}
Ох, как же я эпично выстрелил себе в ногу.
krypt 22.11.2012 19:00 # +1
http://ideone.com/cRHaK2
b1 is true; b2 is false.
/me пошёл откапывать собаку
wlad1994 25.04.2013 17:01 # −3
krypt 22.11.2012 19:07 # +3
107155712 - 1й байт равен нулю, и он обрезается при приведении типа к BOOL (он один байт)
krypt 22.11.2012 19:09 # 0
Главное, это работает. Моя картина мира выстояла.
byss 22.11.2012 19:50 # −2
вместо няшного
.
Xom94ok 22.11.2012 20:18 # +3
http://ideone.com/ulMfCV
krypt 22.11.2012 22:53 # 0
bormand 22.11.2012 23:20 # +3
krypt 22.11.2012 23:30 # +2
очевиднее. Для того, чтобы переварить !! надо включать мозг )
guest 23.11.2012 00:41 # +4
!! - классика
один раз запомнил и пользуйся
absolut 23.11.2012 06:09 # 0
guest 23.11.2012 07:41 # +3
Ты так говоришь, как будто это что-то плохое.
guest 23.11.2012 08:03 # −1
LispGovno 23.11.2012 10:11 # 0
TarasB 23.11.2012 10:31 # +5
TarasB 23.11.2012 09:40 # −1
Fai 23.11.2012 09:49 # +1
Но керниган и ритчи видимо о нем не слышали.
guest 23.11.2012 09:57 # +5
Steve_Brown 23.11.2012 16:19 # 0
Согласен.
Я употребляю !! только для случаев типа:
krypt 23.11.2012 16:47 # 0
guest 23.11.2012 09:13 # 0
Даже в конь-тексте жабьего скрипта это ужасная мерзость.
Fai 23.11.2012 09:20 # 0
byss 23.11.2012 10:35 # 0
bormand 22.11.2012 19:35 # +6
Странный bool в этой вашей objective-c. Char в овечьей шкуре?
P.S. Кстати в мускуле когда-то тоже запилили свой костыльный бул из чара, и неподумавши запихали в него результат чего-то типа memcmp, а потом, когда авторы glibc сделали небольшую оптимизацию (сравнение не по байтам, сразу по 4, чтобы быстрее), оно начало пропускать юзера под случайным паролем с вероятностью 1/256... Так что на багу int -> костыльный_бул вы попались не первым, ой не первым...
byss 22.11.2012 19:46 # 0
krypt 22.11.2012 20:26 # +1
Именно, наследие Си. Причём там 3 типа, bool, BOOL и Boolean, и все 3 объявлены по разному.
bormand 22.11.2012 20:29 # +1
krypt 22.11.2012 20:35 # +6
#define bool BOOL
typedef unsigned char Boolean
typedef int boolean_t
4
плюс, да, бонусом NSNumber и NSValue, которые тоже могут представлять Boolean
bormand 22.11.2012 20:50 # +5
typedef float FUZZYBOOL;
krypt 22.11.2012 22:08 # 0
bormand 22.11.2012 22:28 # 0
3.14159265 22.11.2012 20:52 # +4
В общем когда делаешь язык или диалект - то лучше когда-нибудь, да отказаться от старого наследия и поддерживать только то что органично вписывается в структуры.
Пхп, кресты, жава - примеры обратной совместимости. В каждом куча граблей и в каждом остался мерзкий сишный switch.
Вот питон есть 2-й, а 3-й - уже немного другой язык.
bormand 22.11.2012 21:14 # +2
Только сразу. Потом уже поздно, ибо уже написана куча проектов и либ.
> питон
Ну есть третий питон - а где он? Прошло уже 4 года, а половина либ не портирована, в тех же линухах по дефолту до сих пор стоит второй, софт юзает второй...
P.S. После поломки совместимости начинается еще больший бардак. Народ вместо того, чтобы перейти на новую версию начинает писать прослойки и ифдефы, поддерживающие и старое и новое... Так что хз еще, где пиздец жутче.
3.14159265 22.11.2012 21:49 # +1
В конце концов много вещей переписывается с нуля.
>Прошло уже 4 года, а половина либ не портирована
Не считаю это большой проблемой, думаю лет через 10 многие скажут спасибо за отказ от этой обратной совместимости.
Ведь язык избавится от многих устаревших решений и потому будет проще.
Кто хочет - пишут на 2-ом. Зато практически весь новый код пишется под новую версию. Потому когда-нибудь наступит переломный момент.
> когда-нибудь
Я тоже думал над "сразу", но некоторые неудачные решения проявляются только после внедрения.
Иногда необходимо убирать ошибки прошлых версий.
Просто не нужно делать это слишком часто.
Сомневаюсь что в ближайшие десятилетия будут внедрят 4-ю, несовместимую версию.
bormand 22.11.2012 22:13 # +1
> Сомневаюсь что в ближайшие десятилетия будут внедрят 4-ю, несовместимую версию.
Ну да, это его убьет.
> Просто не нужно делать это слишком часто.
И слишком редко походу тоже. Иначе получится как с явой или крестами - поломка обратной совместимости вызовет море батхертов.
К примеру я продавал свою либу. Вышла ява 1.8, в которой все безупречно и удобно, но она не совместима с явой 1.7. И передо мной стоит выбор - или переходить на 1.8 полностью (и терять всех клиентов, которые юзают 1.7, и не могут перейти на новую (а таких в "энтерпрайзе" будет большинство)), или оставаться на 1.7 (и не получать новых клиентов, т.к. новые проекты будут на 1.8), или наслаждаться разработкой под обе версии (как минимум лет 5)...
nemyx 08.07.2020 09:38 # 0
Ну как, сказали?
krypt 22.11.2012 22:15 # 0
Язык-то не на много положе этого вашего C++ - всего на пару лет.
bormand 22.11.2012 22:19 # 0
Говно мамонта типа вот такого тоже понимает?
krypt 22.11.2012 22:31 # 0
MAMOHT 03.12.2018 06:20 # 0
inkanus-gray 22.11.2012 22:38 # +2
krypt 22.11.2012 22:41 # 0
bormand 22.11.2012 23:19 # 0
krypt 22.11.2012 22:39 # 0
guest 23.11.2012 00:43 # −1
http://ideone.com/1zC8Ht
inkanus-gray 23.11.2012 00:44 # +1
Почему у меня работает?
guest 23.11.2012 01:23 # 0
guest 23.11.2012 02:27 # +3
Компилятор Кернигана и Ритчи после заголовка функции ожидает составной оператор (фигурные скобки) и всё, что описано до него, считает не локальными переменными, а описаниями параметров функции.
Для сравнения то же самое на Алголе-60 (за точность не ручаюсь): То же самое на Фортране-77 (тоже не ручаюсь за точность): А вот для сравнения в ANSI/ISO Си:
roman-kashitsyn 22.11.2012 19:17 # +2
Only zero is false, they said.
Lure Of Chaos 23.11.2012 03:14 # +2
Fai 23.11.2012 09:26 # 0
Неужели я не один такой?
byss 23.11.2012 10:34 # 0
Я прямо разочаровался.
guest 23.11.2012 09:31 # 0
> 0, -1
А 1?
> истину мерять
Кулстори бро.
Fai 23.11.2012 09:35 # +4
На паре (0,-1) побитовые и логические операции представляют собой одно и тоже.
krypt 23.11.2012 17:12 # 0
То есть все биты - 1 Там получить ноль без логических и арифмитических операций даже при большом желании не получится.
TarasB 23.11.2012 09:38 # −3
Fai 23.11.2012 09:51 # −1
byss 23.11.2012 10:25 # 0
TarasB 23.11.2012 10:29 # +3
byss 23.11.2012 10:31 # +1
LispGovno 23.11.2012 10:32 # −3
bormand 23.11.2012 10:51 # 0
PascalGovno 23.11.2012 15:21 # 0
http://stackoverflow.com/questions/8617581/how-to-call-enumsystemlocales-in-delphi
Там же есть ссылка на майкрософтовского архитекта, который перечисляет сколько булевых типов они изобрели, пока делали Windows.