Этот руководство по стилю кодирования взято из dav1d
Табуляция против пробелов
Нет табуляций, только пробелы; отступ в четыре пробела
Обратите внимание, что некоторые инструменты могут добавлять табуляции при автоматическом выравнивании кода, пожалуйста, проверьте свои коммиты с помощью инструмента сравнения.
Для многострочных заявлений, отступ следующей строки зависит от контекста заявления и фигурных скобок вокруг него.
Например, если у вас длинное присваивание, вы можете выбрать выровнять его по знаку равно первой строки, либо (если это приведёт к меньшему количеству строк кода) просто сделать отступ на один уровень глубже относительно уровня отступа первой строки:
const int my_var = something1 &&
something2;
или
const int my_var = something1 +
something2 - something3 * something4;
Однако, если есть фигурные скобки, первый непробельный символ строки должен быть выровнен со уровнем фигурной скобки, к которой он принадлежит:
const int my_var = (something1 +
something2) * something3;
Используйте CamelCase
для типов и under_score
для имён переменных (TypeName my_instance;
)
Используйте константы там, где возможно, за исключением объявления функций в заголовочных файлах, где мы используем константы только для массивов:```c
int my_func(const array *values, int arg);
[..]
int my_func(const array *const values, const int num) { [..] }
Фигурные скобки располагаются на той же строке для однострочных заявлений, но на новой строке для многострочных заявлений:
```c
static void function(const int argument) {
do_something();
}
в отличие от
static void function(const int argument1,
const int argument2)
{
do_something();
}
Фигурные скобки необходимы только для многострочных блоков кода или многострочных условий;
if (condition1 && condition2)
do_something();
и
if (condition) {
do_something_1();
do_something_2();
}
и
if (condition1 &&
condition2)
{
do_something();
}
Ключевые слова switch
и case
выровнены на одном уровне, а блок кода выровнен на один уровень глубже:
switch (a) {
case 1:
bla();
break;
}
но для очень простых блоков можно также поместить всё на одну строку:
switch (a) {
case 1: bla(); break;
}
Строки должны иметь длину не более 80 символов. Мы допускаем исключения, если обертывание строки приведёт к чрезмерной нелепости, и это делается в каждом случае отдельно.
Не используйте goto
, за исключением стандартного обработки ошибок.
Используйте встроенные типы (int
, unsigned
, и т.д.) для скалярных переменных, где верхний предел размера не имеет значения.
Используйте типы с указанием размера (uint8_t
, int16_t
, и т.д.) для массивов/векторов переменных, где верхний предел размера имеет значение.
Используйте динамические типы (pixel
, coef
, и т.д.), чтобы многобитовая шаблонизация работала так, как следует.## Документация Doxygen
/* Описание уровня файла */
/*********************************************************************************
* @file
* file.c
*
* @brief
* Краткое описание файла
*
* @author
* Автор
*
* @par Список функций:
* - fun1()
* - fun2()
*
* @remarks
* Любые замечания
*
********************************************************************************/
/* Описание макроса */
/** Краткое описание макроса */
#define MACRO val
/* Описание enum: описание всех записей */
/** Краткое описание enum */
enum {
ENUM1 = 1, /**< Краткое описание ENUM1 */
ENUM2 = 2, /**< Краткое описание ENUM2 */
ENUM3 = 3 /**< Краткое описание ENUM3 */
}
/* Описание enum: общее описание */
/** Краткое описание enum */
enum {
ENUM1 = 1,
ENUM2 = 2,
ENUM3 = 3
}
/* Описание уровня структуры */
struct {
member1, /**< Краткое описание member1 */
member2, /**< Краткое описание member2 */
member3, /**< Краткое описание member3 */
}
/* Описание уровня функции */
/*********************************************************************************
*
* @brief
* Краткое описание функции
*
* @par Описание:
* Подробное описание функции
*
* @param[in] prm1
* Краткое описание prm1
*
* @param[in] prm2
* Краткое описание prm2
*
* @param[out] prm3
* Краткое описание prm3
*
* @returns
* Краткое описание возвращаемого значения
*
* @remarks
* Любые замечания
*
********************************************************************************/
После завершения кодирования убедитесь, что удалены все лишние пробелы в конце строк и замените все табуляции на четыре пробела.```bash find . -name "<Файл_имя>" -type f -exec sed -i 's/\t/ /;s/[[:space:]]*$//' {} +
Где `<Файл_имя>` может быть `"*.c"` или `"*(ваше расширение файла здесь)"`.\
Ищите справку по команде `find` или полезные советы для получения дополнительных опций.\
**Не используйте** команду `find` в корневой директории без фильтра или с присутствием папки `.git`, так как это повредит вашу папку репозитория, и вам потребуется скопировать новый `.git` и заново настроить папку.
Альтернативно, для одного или нескольких файлов:
```bash
sed -i 's/\t/ /;s/[[:space:]]*$//' <Файл_имя/Путь_к_файлу>
Примечание: На macOS и связанных с ней дистрибутивах вы можете использовать sed -i ''
вместо sed -i
из-за различий между GNU sed.
ls -Recurse -File -Filter *.c | ForEach-Object{$(Get-Content $_.FullName | Foreach {Write-Output "$($_.TrimEnd().Replace("`t"," "))`n"}) | Set-Content -NoNewline -Encoding utf8 $_.FullName}
Где -Filter *.c
— это ваше расширение имени файла.
Это не работает с pwsh
на не-Windows ОС.
Ищите справку по командам pwsh
здесь и командам powershell
здесь для получения дополнительной информации о том, что они делают.
Не используйте команду ls
без параметра -Filter
в корневой директории или с присутствием папки .git
, так как это повредит вашу папку репозитория, и вам потребуется скопировать новый .git
и заново настроить папку.Альтернативно, для одного файла:
$filename="<filename>"; Get-content $filename | Foreach {Write-Output "$($_.TrimEnd().Replace("`t"," "))`n") } | Set-Content -NoNewline $filename
Где <filename>
— это конкретный файл, который вы хотите отформатировать.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )