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 |
|
5/22/09 07:53 pm
code wtf
Наткнулся на кусок кода. Не очень нравится. Как бы это поизящнее написать, но чтобы и недлинно, и понятно? Что-то вечером в пятницу ничего не приходит в голову.
if (flags & LOADED)
sprintf(status, "loaded");
if (flags & DIRTY)
sprintf(status, "%s%sdirty", status, (strlen(status)) ? ", " : "");
5/22/09, 06:07 pm
sprintf(status, "%s%s%s", ((flags & LOADED) ? "loaded" : ""), ((flags & (LOADED | DIRTY)) ? ", " : ""), ((flags & DIRTY) ? "dirty" : ""));
5/22/09, 06:24 pm
Неверно, кстати: в случае только DIRTY будет запятая.
Но, да, в случае ровно двух состояний я б использовал один принт (кстати, snprintf)
5/22/09, 06:28 pm
Да, конечно с запятой поторопился, как всегда :) И да, sprintf - зло :)
5/22/09, 06:40 pm
> (кстати, snprintf)
там status объявлен как char[255] или что-то в этом роде, и функция короткая, видно, что всё хорошо. snprintf — если печатать всего много.
5/22/09, 07:57 pm
Лично мне кажется, что чем понятнее — тем лучше. Зачем здесь вообще sprintf ?
status[0] = '\0'; if (flags & LOADED) strcpy(status, "loaded"); if (flags & DIRTY) { if (status[0]) strcat(status, ", "); strcat(status, "dirty"); }
5/22/09, 07:57 pm
Блин, отступы забыл сделать через и они похерились. Впрочем, всё и так понятно.
6/14/09, 04:20 am
Используйте <pre>, не убивайте себя nbsp-ами.
Стандартный код для говносайтов: <code><pre>if (foo) { something }</pre></code>
Именно там начинается и заканчивается код. Иначе будут некрасивые пустые строки в браузере.
Почему для *говно*сайтов, потому что нормальный верстальщик добавил бы в CSS простое правило: code { white-space: pre; } и тег pre был бы уже не нужен.
А зачем вообще code - ну так положено, код обрамлять тегом таким. В светлом будущем правильные программы будут извлекать из этого полезную информацию. Например, браузер нарисует код с подсветкой синтаксиса.
5/23/09, 06:37 pm
оставить как есть, только strlen убрать.
|