# Code style

Стандарт оформления кода - набор правил и соглашений, используемых при написании исходного кода. Наличие общего стиля программирования облегчает понимание и поддержание исходного кода, написанного более чем одним программистом, а также упрощает взаимодействие нескольких человек при разработке программного обеспечения.

{% embed url="<https://habr.com/en/company/manychat/blog/468953/>" %}
Интересная статья про Code Style
{% endembed %}

## [`editorconfig`](https://editorconfig.org/)

{% embed url="<https://editorconfig.org/>" %}

Аналог clang-format. Применяется по умолчанию в Visual Studio (подробнее [здесь](https://docs.microsoft.com/ru-ru/visualstudio/ide/cpp-editorconfig-properties?view=vs-2019) и [здесь](https://docs.microsoft.com/en-us/visualstudio/ide/create-portable-custom-editor-options?view=vs-2022)).

## [clang-format](https://clang.llvm.org/docs/ClangFormat.html)

{% embed url="<https://clang.llvm.org/docs/ClangFormatStyleOptions.html>" %}
Опции clang-format
{% endembed %}

`clang-format` - это служебная программа, которая упрощает задание стиля и формата кода на основе набора правил, которые можно настроить в файле `.clang-format` или `_clang-format`.

Можно создать свой файл `.clang-format` или `_clang-format` для настраиваемого определения формата. Такой файл уже присутствует в папке проекта, Visual Studio использует его для форматирования всех файлов исходного кода в этой папке и вложенных в нее папках.

### **`clang-format` в терминале**

В первую очередь необходимо скачать `llvm`: <https://github.com/llvm/llvm-project/releases/tag/llvmorg-21.1.8> либо установить (Unix) при помощи следующих команд:

```bash
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -

# clang-18
sudo add-apt-repository "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-21 main"
sudo apt install clang-21 clang-tools-21 clang-21-doc libclang-common-21-dev libclang-21-dev libclang1-21 clang-format-21 clangd-21 libc++-21-dev libfuzzer-21-dev lldb-21 lld-21 libc++abi-21-dev
```

Используемая на курсе версия clang-format будет указана в логах Actions.

Пример использования:

```bash
clang-format -i "main.c" --style=file
```

Пояснение по примеру:

* `-i` – изменения сразу будут записаны в этот же файл;
* `--style=file` – используется стиль оформления из файла, лежащего там же, где исполняется команда.

Из полезного: `-n` – просмотр изменений без модификации файла.

Простое применение:

1. Клонируем репозиторий курса.
2. Переносим в корень репозитория файлы с исходным кодом.
3. Запускаем по ним из корня репозитория форматирование `clang-format`-ом с `-i`.

### **`clang-format` в Visual Studio**

Visual Studio по умолчанию использует форматирование согласно дефолтным `editconfig` настройкам. Но ей можно указать, что необходимо использовать `clang-format`.

Это можно сделать следующим образом:

1. Положить файл `.clang-format` в директорию проекта.
2. Переходим в `Debug` - `Options` - `Text Editor` - `C/C++` - `Code Style` - `Formatting`.
3. Включаем `Enable ClangFormat support`.
4. Настраиваем `ClangFormat execution` следующим образом:
   1. `for all formating scenarios -.clang-format` применяется и при ручном запуске форматирования кода, и при его написании
   2. `only for manually invoked formatting command -.clang-format` применяется только в случае ручного форматирования кода
5. (Опционально) Если выбран 4.2 или вы не сразу положили `.clang-format` в директорию проекта, то проходимся по каждому файлу кода и нажимаем `Edit` - `Advanced` - `Format Document`.

### **`clang-format` в Visual Studio Code**

{% embed url="<https://marketplace.visualstudio.com/items?itemName=xaver.clang-format>" %}
Основная документация
{% endembed %}

### **`clang-format` в CLion**

CLion имеет встроенный `clang-format`, но CLion можно указать, что нужно использовать другой файл:

1. Положить файл `.clang-format` в директорию проекта.
2. Перейти в `Settings | Editor | Code Style - ClangFormat`.
3. Включить `Enable ClangFormat (only for C/C++/Objective-C)`.

### **`clang-format` в Qt Creator**

Для автоматического форматирования кода необходимо установить плагин [Beautifier](https://doc.qt.io/qtcreator/creator-beautifier.html).

После установки плагина:

1. Положить файл `.clang-format` в директорию проекта.
2. Установить `clang-format`:
   * UNIX/Ubuntu:

     ```bash
     sudo apt install clang-format
     ```
   * Windows: установить LLVM (то есть поставить компилятор Clang с кучей утилит) и найти файл LLVM\bin или скачать напрямую, например [отсюда](https://drive.google.com/file/d/1-Y1TJ_DNE6bdG5IJQWNp13Q45WB8RQ2q/view?usp=sharing).
   * MacOS:

     ```bash
     brew install clang-format
     ```
3. Перейти в `Tools` - `Options` - `Beautifier`.
4. В `General` включить `Enable auto format on file save`.
5. Во вкладке `ClangFormat`
   1. Убедиться, что в Clang Format Command найдет установленный ClangFormat (`clang-format` или `clang-format.exe`)
   2. Рекомендуется выбрать в `Use predefined style` опцию `File` (аналогично Visual Studio)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://skkv-itmo.gitbook.io/c-cpp-cookies/ide-features/code-style.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
