- 1
while(*(++a)=*(++b));
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+44.3
while(*(++a)=*(++b));
Краткость - сетра таланта.
guest 02.09.2009 16:36 # +1.8
Во всех учебниках так и делается копирование строк (ну, правда, a++ вместо ++a).
Следовательно или это не говнокод или C++ говноязык (конечно это не говнокод :) )
guest 02.09.2009 17:42 # +2
guest 03.09.2009 08:20 # 0
guest 03.09.2009 15:32 # −2
guest 03.09.2009 17:44 # +2
Кроме исключительно небезопасного в сях иногда встречается просто небезопасный :)
guest 03.09.2009 11:23 # 0
guest 03.09.2009 14:19 # 0
1. К C++ имеет отношение, только если его рассматривать как наследник C.
2. Почему вы решили, что это копирование строк? Может слонов. А может счетов пользователей.
3. Что будет, если указатель нулевой?
4. Как оценить размер буфера-приемника?
...
можно продолжать и дальше, но лучше отправить читать Саттера, Александреску, Макконела
guest 03.09.2009 15:37 # −1
вот мой говнокод:
a = b + 1;
сколько тезисов сможешь привести почему так нельзя писать?
по твоим недодумкам:
1. чушь какую-то сказал
2. а что ещё в сях имеет терминатор \0, сработающий как false? слоны, однозначно!
3. а если пернуть на спичку, жопа загорится? автор к сожалению не догадался привести ещё пару десятков предшествующих строк.
4. очередной вывод из воздуха
guest 03.09.2009 16:40 # 0
consider this:
class DerClass
{
public:
...
operator bool () const { return false; }
DerClass& operator = (DerClass const & rhs) { return *this;}
DerClass& operator ++ () { return *this;}
};
void Uzhos(DerClass* a, DerClass* b)
{
while(*(++a)=*(++b));
}
guest 03.09.2009 16:45 # +1
guest 03.09.2009 16:56 # 0
оригинальный код я говном не считаю, кстати, просто тут почему-то многие уверены в том, что это сишный код и обязом строки и обязом копируются.
guest 03.09.2009 17:20 # 0
guest 03.09.2009 17:38 # +1
> код исключительно Сишный и под сишные строки
> ты дурак? где ты видел в сях исключительно безопасный код?
> а что ещё в сях имеет терминатор \0, сработающий как false? слоны, однозначно!
guest 03.09.2009 17:11 # 0
По вашему фрагменту всего один совет - избегайте имен переменных оторванных от предметной области. Код, а не комментарии должны говорить о том, что Вы делаете.
Дискутирование на тему окружаещего кода неуместно: вот тот пример, который я упоминал, полностью:
void scopy(char* s1, char* s2)
{
while(*s1++=*s2++);
}
Авторский синтаксис сохранен.
Dimarius 04.09.2009 08:59 # 0
Barmaglot 04.09.2009 09:53 # 0
guest 06.09.2009 11:31 # 0
guest 06.09.2009 11:32 # 0
xaionaro 23.09.2009 12:06 # 0
Проблема скорее в другом, данный алгоритм предполагает завершение по "\0" а не по длинне строки, поэтому memcpy() - не альтернатива, а альтернативой является что-нибудь вроде strcpy(). Но даже для strcpy() мои рассуждения выше верны.
Да, я так и не понял, чем плох ассемблер?
guest 24.09.2009 18:50 # 0
memcpy можно использовать так:
memcpy(...,strlen(str),...);
guest 24.09.2009 23:18 # 0
guest 28.09.2009 09:54 # 0
На новых компах сия команда работает много медленнее, чем цикл. Причина в том, что за счет предсказания ветвлений и возможности параллельного исполнения команд это работает быстрее, тк rep movsx не параллелиться с другими командами.
xaionaro 10.11.2009 18:56 # 0
А по поводу инлайнов, я говорю факт того, что у меня компилилось под netbsd с помощью gcc4
guest 15.09.2009 10:25 # 0
*(++a)=*(++b)
Это значит "Значение переменной, находящейся по адресу (а+1) увеличить в (b+1) раз" ...
= *(++б)
=* (++б)
что из этого сработает, так сказать?
guest 19.09.2009 16:05 # 0
guest 24.09.2009 20:09 # 0
guest 28.09.2009 09:56 # 0
xeonix 12.10.2009 17:00 # 0