1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-SVT-AV1

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
STYLE.md 9.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 07.03.2025 17:53 ded9fc2

Стиль оформления кода

Этот руководство по стилю кодирования взято из 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.

Для PowerShell/pwsh

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-SVT-AV1.git
git@api.gitlife.ru:oschina-mirror/mirrors-SVT-AV1.git
oschina-mirror
mirrors-SVT-AV1
mirrors-SVT-AV1
master