Существует мнемоническое правило: функции не должны по объему кода превышать двух экранов текста и иметь больше
inline
.Комментарии
Очень полезно использовать комментарии кода, но делать это нужно правильно. Обычно необходимо описывать,
В ядре используются комментарии в стиле С, хотя компилятор gcc поддерживает также и комментарии в стиле C++. Обычно комментарии кода ядра должны быть похожи на следующие (только на английском языке, конечно).
/*
* get_ship_speed() - возвращает текущее значение скорости
* пиратского корабля
* Необходима для вычисления координат корабля.
* Может переходить в состояние ожидания,
* нельзя вызывать при удерживаемой блокировке.
*/
Комментарии внутри функций встречаются редко, и их нужно использовать только в специальных ситуациях, таких как документирование дефектов, или для важных замечаний. Важные замечания часто начинаются со строки "XXX: "
"FIXME: "
, как в следующем примере./*
* FIXME: Считается, что dog == cat.
* В будущем это может быть не так
*/
У ядра есть возможность автоматической генерации документации. Она основана на GNOME-doc, но немного модифицирована и называется Kernel-doc. Для создания документации в формате HTML необходимо выполнить следующую команду.
make htmldocs
Для генерации документации в формате postscript команда должна быть следующей.
make psdocs
Документировать код можно путем введения комментариев в специальном формате.
/**
* find_treasure - нахождение сокровищ, помеченных на карте крестом
* @map - карта сокровищ
* @time - момент времени, когда были зарыты сокровища
*
* Должна вызываться при удерживаемой блокировке pirate_ship_lock.
*/
void find_treasure(int dog, int cat)
{
/* ... */
}
Для более подробной информации см. файл Documentation/kernel-doc-nano-HOWTO.txt
Использование директивы typedef
Разработчики ядра не любят определять новые типы с помощью оператора typedef
• Определение нового типа через оператор typedef
• Поскольку новый тип получается скрытым, то код более подвержен таким нехорошим вещам, как передача структуры данных в функцию по значению, через стек.
• Использование оператора typedef
Чтобы избежать насмешек, лучше не использовать оператор typedef
Конечно, существуют ситуации, в которых полезно использовать оператор typedef
typedef
необходим или он используется только для того, чтобы уменьшить количество символов при наборе кода.Использование того, что уже есть
Не нужно инкапсулировать стандартные интерфейсы в другие реализации обобщенных интерфейсов. Часто приходится сталкиваться с кодом, который переносится с других операционных систем в систему Linux, при этом на основе существующих интерфейсов реализуется некоторая громоздкая функция, которая служит для связи нового кода с существующим. Такое не нравится никому, поэтому необходимо непосредственно использовать предоставляемые интерфейсы.
Никаких директив ifdef
Использование директив препроцессора ifdef