- 1
- 2
- 3
- 4
- 5
- 6
int wordLen(const char* word)
{
int i=-1;
while(word[++i]!='\0'&&word[i]!='\n');
return i;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+8
int wordLen(const char* word)
{
int i=-1;
while(word[++i]!='\0'&&word[i]!='\n');
return i;
}
Типичная лаба, но как же смешно это увидеть спустя некоторое время
bormand 29.06.2013 13:43 # +2
P.S. Ну хотя да, говно есть, и оно таится в названии функции - это же не wordLen, а lineLen. Хотя оно и в исходном варианте, имхо, понятное и простое.
govnomonad 29.06.2013 14:21 # 0
эх, вам про const говорили, я писал лабы без него
superhackkiller1997 01.07.2013 06:30 # 0
В четыре раза компактней - в 10раз быстрее и выглядит не как говно.
bormand 01.07.2013 08:53 # +2
Судя по исходнику в либцах да, для длинных строк будет на порядок быстрее, чем посимвольно.
> В четыре раза компактнее
> выглядит не как говно
Ну тут полностью согласен. Еще бы в стандарт этот strchrnul протащили, функция то годная. Кстати, я не знал про нее, спасибо за инфу.
> uint64_t
size_t всё-таки. Пожалей 32-битников.
> char
const то чем помешал? Скорость от него уж точно не упадет.
superhackkiller1997 01.07.2013 11:10 # 0
Ну логически - strchr() доходит до нулла, значит поидее оно знает адрес конца и 100% кто-то сделал модификацию( как с мемкопи), которая возвращает адрес конца.
Зря пацантры не юзают strchr() - на ней выходят просто в хламину быстрее парсеры, но пацаны любят по старинке. Мне нужна была модификация, в которой нулевой символ можно было менять на произвольный. strchr(str, 'a', '\n'); Искать 'а' - остановится на '\n'. Обычно я когда парсил файлецы делал что-то типа *strchr(str, '\n') = 0; и уже обрабатывал строку, но я так её и не нашел, а искать было лень. Зато *strchr(str, '\n') = 0; почти бесплатно, ибо это префетч и я как-то подзабил, но надо будет запилить или найти.
>const то чем помешал? Скорость от него уж точно не упадет.
Я не люблю ставить конст там, где он не упал. Один хрен там ассемблер, а я в своей обёртке данные никак не меняю. Я обычно хреначу тайпдефы, ибо мне лень писать.
TarasB 01.07.2013 11:22 # +4
Зато в твою обёртку константную строку нельзя передавать, какого хуя?
superhackkiller1997 01.07.2013 11:40 # 0
TarasB 01.07.2013 16:25 # +4
superhackkiller1997 01.07.2013 20:13 # −5
Нука, питух, обрисуй мне семантику конста, акромя защиты от питуха-идиота, вроде тебя.
Выкладывай выхлоп конпелятора.
TarasB 01.07.2013 20:37 # 0
Нет ты.
> Нука, питух, обрисуй мне семантику конста, акромя защиты от питуха-идиота, вроде тебя.
Это не тольк защита, но и возможности. Возможности передавать в функцию константные объекты, например, полученные как выхлоп другой функции. И вместо
smth tmp = f();
g(tmp);
можно написать g(f());
Нормальные люди не пишут на объектах "всё можно", они продумывают, что с объектом можно делать, а что нельзя. И часто ограничения в одном месте освобождают от рассмотрения лишних случаев в другом.
superhackkiller1997 01.07.2013 21:55 # −5
Т.е. по твоему мой стиль программирования, который состоит из 20-30 вызовов функций на 100строк кода не может у меня работать без коснта? Но он работает.
Нет никаких константных объектов - это тебе не С++, плюсовой питушок. Тут нет никакаких констант, объектов и прочего. Сдесь есть инлайн и алиасы, и поцан, который знает как это работает - ему не упали твои консты и прочая байдаа.
Кстануть в функции твой конст для меня ничего не стоит, поэтому если я захочу убивать твои данные - я их убью.
Обычное питушачье ко-ко-ко, не более. Тупые аргументы идиота, аля "без конста я не могу передавать выхлоп одной функции на влод другой" и т.п.
Перестань оправдываться - конст в Си не имеет семантики - это просто синтаксическая проверка, не более. В местах, где конпелятор без конста тупит, аля массивы указателей на функции - я пишу конст, но там, где он не упла - я не пишу.
bormand 01.07.2013 11:26 # +1
Посмотрел сейчас, в либцовых strchr и strchrnul код одинаковый. Отличаются только куски с return'ами.
superhackkiller1997 01.07.2013 11:39 # +1
TarasB 01.07.2013 11:20 # +2
В исходном варианте питушня, и даже не потому, что i два раза встречается в выражении, и один из них с экскрементом (тут можно отмазаться точками следования), а просто по несимметричности. Ну и -1 - это костыль, очевидно.
an0nym 29.06.2013 18:37 # 0
bormand 29.06.2013 19:43 # −1
guest 29.06.2013 19:46 # +4
bormand 29.06.2013 20:09 # 0
guest 29.06.2013 20:19 # −9
А в яваскрипте для сложения чисел используется оператор - -
Какая сука и за что меня минусует?
bormand 29.06.2013 20:50 # +5
Ты не с хабра случаем? Что-еще за кармодрочерские хабрабатхерты с переходом на личности за ёбаный минус? Нельзя было, не повышая тона, спокойно спросить за что минуснули?
Первый твой коммент я минуснул поторопившись, т.к. не распознал шутки в твоей фразе про "c++ это с с оператором ++". Показалось, что пишешь на полном серьезе.
Второй коммент минусанул за суку. Еще вопросы есть?
guest 29.06.2013 21:18 # −1
И да, это была не совсем шутка, когда-то я действительно так думал :)
bormand 29.06.2013 21:33 # +3
Как говорил Карлсон: Спокойствие, только спокойствие.
> а тех, кто мне отвечает - с плюсами
Ну теперь и у меня тоже минус есть :)
> это система
ZOG не дремлет
eth0 29.06.2013 21:43 # 0
anonimb84a2f6fd141 30.06.2013 12:31 # −4
Vasiliy 30.06.2013 20:36 # −1
vistefan 30.06.2013 21:17 # +3
Ересь, нет такого оператора. Это комбо, основанное чисто на математике. Отнять от n число, равное -a -- то же, что прибавить a к n. Парсер парсит первый минус как инфиксный бинарный оператор между токенами, второй - как префиксный унарный ко второму токену.
anonimb84a2f6fd141 01.07.2013 02:38 # +2
vistefan 01.07.2013 09:25 # 0
inkanus-gray 30.06.2013 12:12 # 0
guest 02.07.2013 00:02 # −3
Stertor 04.07.2013 14:35 # −2
Stertor 25.07.2013 08:42 # +1