- 1
- 2
- 3
- 4
do
{
...
} while ((strcmp(input,"") != 0)); /* till end of string */
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+142
do
{
...
} while ((strcmp(input,"") != 0)); /* till end of string */
нашел в прошивке одного очень известного производителя сетевого оборудования, они так парсят команды, введенные пользователем
Но в этом случае, наверное, и правда оптимизнётся в while (*input)
а настроение зависит от того как настроишь
Про ненужные вызовы я не понял - тут что, проблема с преферансом? Это сравнение делается при отрисовке экрана в каждом пикселе?
если так не нравятся строки, то запили собственный класс с конструктором и методами и сиди вызывай методы в каждом цикле, где достаточно просто написать for(; *input; input++)
В крестах я так и делаю. Тут кстати нормальный код.
> просто написать for(; *input; input++)
Что это за говнокод? Указатели какие-то ещё...
Толстовато, конечно... Откуда у тебя в сишке классы? Но пародию на ООП на сишке таки можно замутить.
ну и, наконец, что распидорасит, если сделать внутренний begin end во внешнем begin end?
в BEGIN добавь создание нового списка локальных переменных, в END уничтожение этого списка
Из 80-го года.
сишка даёт возможность на лезть в дерьмо, а жаба не даёт
zero-cost abstractions
move semantics
guaranteed memory safety
threads without data races
trait-based generics
pattern matching
type inference
minimal runtime
efficient C bindings
не возможно
ну охуеть теперь
Кстати там, где мне был нужен динамический полиморфизм, мне всё равно виртуальные методы не пригодились. Потому что мне нужны были не только виртуальные методы, но и виртуальные статические константы. Пришлось руками заполнять поля метаклассов.
и лишний вызов
>Зачем, я и так знаю основы.
Ты лучше не препирайся, а послушай девушку. Дело ведь говорит
p.s. въебал минус за то, что бросаешь тень на мораль холостяцкой жизни. главное - разными руками дрочить, а то член станет напоминать джойстик.
char buf[BUF_LENGTH];
int length;
}; Так что ли?
Как этот BUF_LENGTH выбрать? Что делать, если надо сохранить более длинннную строку?
Длина доступного в говносистеме пути помноженная на 2, например.
> Что делать, если строка длиннее?
Кричать "ах я лох, но почему же я не подобрал правильную длину строки для данного приложения" и скорее отправлять на мой фаллический счет на кайманах 300 грамм золота.
struct string {
size_t len;
size_t maxlen;
char[1] data
} ;
а выделять так: malloc(sizeof(string) + real_size - 1);
Если надо более длинную строку - реаллок в зубы и вперед.
Но laMer007 явно не это имел в виду. Тут же выделять и освобождать придётся.
Веревки (или Б-дерево) которые можно реализовать и на Си, т.как не нужно заранее знать размер строк, а можно выделять по мере необходимости, и реаллоков не будет с добавлением всего-лишь логарифмического фактора. При чем, возможен даже выигрыш при интенсивном копировании / конкатенации и т.п.
> И тогда этот код не надо будет менять.
Как удобно! В мире останется 4 неизменных строки, которые не полагались на \0.
Правда, остальные миллиарды строк всё же придётся переписать.