>примера кода из ядра привести не могу, хотя вот посмотрите тут уже
>"модуль" набросали.
>
>да, я предпочитаю бездумно следовать этому шаблону. более того, ругаюсь очень сильно,
>когда вижу непроинициализированные при объявлении переменные. Ну а кому-то удобнее наоборот, когда все переменные компактно объявляются в одном месте, а присваивания идут естественным образом по ходу дела. Это помогает следить за их количеством, что в случае с именно C порой весьма актуально, и отслеживать логику работы функции, не дёргаясь глазами по коду с мыслью "а во что эта хрень была выставлена-то?". И что удобнее читать, вот это:
/* Взято из src/lib/libc/stdio/mktemp.c в OpenBSD-CURRENT */
static int
mktemp_internal(char *path, int slen, int mode)
{
char *start, *cp, *ep;
const char *tempchars = TEMPCHARS;
unsigned int r, tries;
struct stat sb;
size_t len;
int fd; len = strlen(path);
if (len == 0 || slen >= len) {
errno = EINVAL;
return(-1);
}
ep = path + len - slen;
tries = 1;
for (start = ep; start > path && start[-1] == 'X'; start--) {
if (tries < INT_MAX / NUM_CHARS)
tries *= NUM_CHARS;
}
tries *= 2;
или вот это?
/* Модифицированная версия */
static int
mktemp_internal(char *path, int slen, int mode)
{
char *start, *cp;
size_t len = strlen(path);
char *ep = path + len - slen;
char *start = ep;
const char *tempchars = TEMPCHARS;
unsigned int r, tries = 1;
struct stat sb;
int fd; if (len == 0 || slen >= len) {
errno = EINVAL;
return(-1);
}
for (; start > path && start[-1] == 'X'; start--) {
if (tries < INT_MAX / NUM_CHARS)
tries *= NUM_CHARS;
}
tries *= 2;
Про то, что хороший код - читаемый код, думаю, рассказывать не надо. :) Ну а современный компилятор, как уже говорилось, спасёт от глупых ошибок.
К слову, C99-компиляторы (а объявление переменных в середине кода - это есть C99) тоже не подо все ныне используемые платформы есть...