k001
k001
:...

April 2032
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

k001 [userpic]
code wtf

Наткнулся на кусок кода. Не очень нравится. Как бы это поизящнее написать, но чтобы и недлинно, и понятно? Что-то вечером в пятницу ничего не приходит в голову.

if (flags & LOADED)
       sprintf(status, "loaded");
if (flags & DIRTY)
       sprintf(status, "%s%sdirty", status, (strlen(status)) ? ", " : "");

Comments

sprintf(status,
"%s%s%s",
((flags & LOADED) ? "loaded" : ""),
((flags & (LOADED | DIRTY)) ? ", " : ""),
((flags & DIRTY) ? "dirty" : ""));

Неверно, кстати: в случае только DIRTY будет запятая.

Но, да, в случае ровно двух состояний я б использовал один принт (кстати, snprintf)

Да, конечно с запятой поторопился, как всегда :) И да, sprintf - зло :)

> (кстати, snprintf)

там status объявлен как char[255] или что-то в этом роде, и функция короткая, видно, что всё хорошо. snprintf — если печатать всего много.

Лично мне кажется, что чем понятнее — тем лучше. Зачем здесь вообще sprintf?

status[0] = '\0';
if (flags & LOADED)
strcpy(status, "loaded");
if (flags & DIRTY)
{
if (status[0])
strcat(status, ", ");
strcat(status, "dirty");
}

Блин, отступы забыл сделать через   и они похерились. Впрочем, всё и так понятно.

Используйте <pre>, не убивайте себя nbsp-ами.

Стандартный код для говносайтов:
<code><pre>if (foo) {
something
}</pre></code>

Именно там начинается и заканчивается код. Иначе будут некрасивые пустые строки в браузере.

Почему для *говно*сайтов, потому что нормальный верстальщик добавил бы в CSS простое правило: code { white-space: pre; } и тег pre был бы уже не нужен.

А зачем вообще code - ну так положено, код обрамлять тегом таким. В светлом будущем правильные программы будут извлекать из этого полезную информацию. Например, браузер нарисует код с подсветкой синтаксиса.

оставить как есть, только strlen убрать.