- 1
while( (*(curr_pos++) != 0x0a) && ((UINT)curr_pos - (UINT)buffer < (UINT)length) );
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+135
while( (*(curr_pos++) != 0x0a) && ((UINT)curr_pos - (UINT)buffer < (UINT)length) );
Ищем новую строку
guest 30.04.2010 16:13 # 0
WTF 2: операции над указателями - может случится переполнение на 64-бит системе
WTF 3: postfix operator в сложной строке. Ненадо заставлять программистов зря думать - curr_pos++ должно быть в в теле цикла.
guest 30.04.2010 16:38 # 0
guest 30.04.2010 19:15 # −2
guest 30.04.2010 19:23 # 0
guest 30.04.2010 20:21 # 0
Dummy00001 04.05.2010 17:06 # 0
DEC Alpha были наверное последними широко-распростаненными ILP64 системами. Альфы были весьма аскетичными и нативно только 64 бит числа поддерживали. Современные процы как правило еще и 32 бит числа держат, как минимум для оперций с памятью. Регистры как правило 64 бита.
Просто большенству програм для большенства ситуаций int хватает за глаза и делание его 64 бит только повышает расход памяти и cache footprint. В С конвертация указателя в инт почти никогда не была законной: правило "sizeof(void *) == sizeof(long)" появилось еще в те времена когда "sizeof(int) == 2" было.
guest 04.05.2010 18:07 # 0
Dummy00001 04.05.2010 19:27 # 0
но в данном случае вообще не надо конверсии типов.
Ц разрешает арифметику на поинтерах:
curr_pos - buffer < length
исходя из того что curr_pos и buffer указатели на тот же самый тип, или компилер ругнется. (но если они указывают на разные массивы - молись).
guest 04.05.2010 19:39 # 0
Dummy00001 04.05.2010 19:47 # 0
сравнивать поинтер с интом нельзя.
но разница двух поинтеров (как выше и написано) она не есть поинтер, она есть ptrdiff_t (из stddef.h вашего компилера). ptrdiff_t как правило лонг со знаком. и его можно сравнивавать и интом.
guest 05.05.2010 09:36 # 0
http://msdn.microsoft.com/en-us/library/3b2e7499.aspx
An int and a long are 32-bit values on 64-bit Windows operating systems.
http://msdn.microsoft.com/en-us/library/aa384242(VS.85).aspx
Надо использовать UINT_PTR
cfdev 30.04.2010 18:41 # 0
WTF2: смотря что определено под UINT. Но зато ведь будет работать на 32бит!
а винда/макось 32 бит - это 95%! Так-то!
WTF3: дело вкуса
TarasB 30.04.2010 20:33 # 0
Хотя в данном случае я всё понял.
guest 30.04.2010 21:57 # 0
BrainFuck? Изотерические языки мне тоже нравятся.
TarasB 30.04.2010 23:41 # 0
guest 30.04.2010 20:34 # 0
Алосо, вот тебе 95% успеха, пользуйся:
#define return (1/(int)(rand()/0.05/RAND_MAX));return
cfdev 01.05.2010 08:00 # +1
То есть всё, что не кроссплатформ - то говнокод? Это вообще-то не так, хотя в глубине души соглашусь :)
guest 01.05.2010 11:41 # 0
В общем да. Конечно, если случаи, когда используются непереносимые компоненты, тогда не говнокод. Но непереносимо писать на переносимом языке - говнокод.
guest 30.04.2010 22:22 # +2
cfdev 01.05.2010 07:59 # 0
guest 30.04.2010 22:01 # −3
guest 30.04.2010 22:06 # −5