Пробіли відносяться до символів, які використовуються у форматуванні коду, також сюди входять символи табуляції та (іноді) розрив рядка. Компілятор, як правило, ігнорує пробіли, але все ж є винятки.
У наступному фрагменті всі рядки коду виконують одне і те ж:
|
1 2 3 4 5 6 7 8 |
std::cout << "Hello, world!"; std::cout << "Hello, world!"; std::cout << "Hello, world!"; std::cout << "Hello, world!"; |
Навіть останній стейтмент з розривом рядка успішно скомпілюється.
Аналогічно працює наступне:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
int add(int x, int y) { return x + y; } int add(int x, int y) { return x + y; } int add(int x, int y) { return x + y; } int add(int x, int y) { return x + y; } |
Винятком, де компілятор враховує пробіли, є цитований текст, наприклад, "Hello, world!".
"Hello, world!"
відрізняється від
"Hello, world!"
Розрив рядка не допускається в цитованому тексті:
|
1 2 |
std::cout << "Hello, world!" << std::endl; // не допускається! |
Ще одним винятком, де компілятор звертає увагу на пробіли, є однорядкові коментарі: вони займають лише один рядок. Наступне спричинить помилку компіляції:
|
1 2 |
std::cout << "Hello, world!" << std::endl; // це однорядковий коментар А це вже не коментар |
Основні рекомендації
На відміну від інших мов програмування, мова C++ не має якихось обмежень у форматуванні коду з боку програмістів. Основне правило полягає лише в тому, щоб використовувати тільки ті способи, які максимально покращують читабельність і логіку коду.
Ось 6 основних рекомендацій:
Рекомендація №1: Замість символа табуляції (клавіша Tab) використовуйте 4 пробіли. У деяких IDE за замовчуванням використовуються потрійні пробіли в якості одного Tab — це також нормально (кількість пробілів можна легко налаштувати у відповідних пунктах меню вашої IDE).
Причиною використання пробілів замість символів табуляції є те, що, якщо ви відкриєте свій код в іншому редакторі, то він збереже правильні відступи, на відміну від випадку з використанням клавіші Tab.
Рекомендація №2: Відкриття та закриття фігурних дужок функції повинно знаходитися на одному рівні на окремих рядках:
|
1 2 3 |
int main() { } |
Хоча є ще наступний варіант (ви також можете його використовувати):
|
1 2 3 |
int main() { //... } |
Перший варіант хороший тим, що в разі виникнення помилки невідповідності дужок, знайти ті самі проблемні дужки буде простіше.
Рекомендація №3: Кожен стейтмент функції повинен бути з відповідним відступом (клавіша Tab або 4 пробіли):
|
1 2 3 4 5 |
int main() { std::cout << "Hello world!" << std::endl; // один Tab (4 пробіли) std::cout << "Nice to meet you." << std::endl; // один Tab (4 пробіли) } |
Рекомендація №4: Рядки не повинні бути занадто довгими. 72, 78 чи 80 символів — це оптимальний максимум рядка. Якщо він буде довший, то його слід розбити на декілька окремих підрядків:
|
1 2 3 4 5 6 7 8 9 10 |
int main() { std::cout << "This is a really, really, really, really, really, really, really, " << "really long line" << std::endl; // один додатковий відступ для рядка-продовження std::cout << "This is another really, really, really, really, really, really, really, " << "really long line" << std::endl; // відступ + вирівнювання з урахуванням головного рядка std::cout << "This one is short" << std::endl; } |
Рекомендація №5: Якщо довгий рядок розбитий на частини за допомогою певного оператора (наприклад, << або +), то цей оператор повинен знаходитися в кінці цього ж рядка, а не на початку наступного. Так читабельніше.
Правильно:
|
1 2 |
std::cout << "This is a really, really, really, really, really, really, really, " << "really long line" << std::endl; |
Неправильно:
|
1 2 |
std::cout << "This is a really, really, really, really, really, really, really, " << "really long line" << std::endl; |
Рекомендація №6: Використовуйте пробіли для покращення читабельності вашого коду.
Менш читабельно:
|
1 2 3 4 |
nCost = 57; nPricePerItem = 24; nValue = 5; nNumberOfItems = 17; |
Більш читабельно:
|
1 2 3 4 |
nCost = 57; nPricePerItem = 24; nValue = 5; nNumberOfItems = 17; |
Менш читабельно:
|
1 2 3 |
std::cout << "Hello world!" << std::endl; // cout і endl знаходяться в бібліотеці iostream std::cout << "It is very nice to meet you!" << std::endl; // ці коментарі погіршують читабельність коду std::cout << "Yeah!" << std::endl; // особливо, коли рядки різної довжини |
Більше читабельно:
|
1 2 3 |
std::cout << "Hello world!" << std::endl; // cout і endl знаходяться в бібліотеці iostream std::cout << "It is very nice to meet you!" << std::endl; // ці коментарі більш читабельні std::cout << "Yeah!" << std::endl; // чи не так? |
Менш читабельно:
|
1 2 3 4 5 6 |
// cout і endl знаходяться в бібліотеці iostream std::cout << "Hello world!" << std::endl; // Ці коментарі погіршують читабельність коду std::cout << "It is very nice to meet you!" << std::endl; // Особливо, коли вони всі в одній купі std::cout << "Yeah!" << std::endl; |
Більш читабельно:
|
1 2 3 4 5 6 7 8 |
// cout і endl знаходяться в бібліотеці iostream std::cout << "Hello world!" << std::endl; // Ці коментарі читати легше std::cout << "It is very nice to meet you!" << std::endl; // Тому що вони розділені додатковими рядками std::cout << "Yeah!" << std::endl; |
Мова C++ дозволяє вибрати вам той стиль форматування вашого коду, в якому вам комфортніше працювати.

Хороший урок, але як на мене, треба було додати про те, що таке клангформат або хоч пару слів про політику корпоративного коду. Тому що рекомендація №2 працює для Microsoft стандарту написання, але в інших компанія як от гугл стандартом є :
….. {
}
і це не є неправильним. Різні компанії притримуються своїх стандартів і варто знати які вони є, щоб не було як в мене коли я вже постфактум про це почув