C
Суть змінної: у C змінна — це не без ускладнень ім’я, а конкретне місце в пам’яті з певним типом.; !; case 1:
return a + b;
Основні функції: typedef struct { };
Після `free` не можна використовувати старий pointer як дійсний.; # Отримання виконуваного файлу.; numbers = NULL;
Підходи:
return 0;
Умови
- контроль пам’яті;
- контроль регістрів;
- мінімальний runtime;
- швидкість;
- передбачуваність;
- доступ до hardware;
- можливість писати firmware;
- підтримку cross-compilation.; Головна думка: C — це мова контролю, продуктивності й системного рівня.; C стала практичною мовою для системного програмування, з цієї причини що давала:
add_executable(myapp main.c utils.c)
- опису об’єктів;
- системних структур;
- записів;
- конфігурацій;
- даних протоколів;
- API-структур;
- binary formats.;== Undefined behavior ==
int main(void) {
Рядки
C залишається важливою мовою для операційних систем, драйверів, embedded-систем, компіляторів, runtime-бібліотек і продуктивних компонентів.; Приклад:
Практична роль: GCC часто застосовують, коли потрібно в Linux, embedded і open-source проєктах.; CC = gcc
typedef
Практична порада: fuzz testing особливо корисний для C-коду, який парсить файли, мережеві пакети або зовнішній input.; };
- швидкого web development;
- business applications;
- CRUD-систем;
- прототипів;
- enterprise UI;
- складної бізнес-логіки без потреби в низькому рівні;
- команд без досвіду memory safety;
- застосунків, де безпека важливіша за legacy-сумісність;
- сценаріїв, де Python, Java, Go, Rust або C# дають швидшу розробку.; printf("%d\n", result);
Умовні оператори дозволяють виконувати різний код залежно від умови.; }
C і Python
Системне програмування
int numbers [] = {10, 20, 30};
- ядро Linux;
- системні утиліти;
- бібліотеки;
- драйвери;
- low-level daemons;
- частина інфраструктурного ПЗ.; Python
У цьому прикладі:
- завжди перевіряти результат `malloc`;
- звільняти пам’ять через `free`;
- після `free` ставити pointer у `NULL`;
- перевіряти межі масивів;
- уникати небезпечних string functions;
- використовувати `sizeof` правильно;
- вмикати compiler warnings;
- використовувати sanitizers;
- писати tests;
- уникати глобального mutable state;
- документувати ownership;
- мінімізувати макроси;
- перевіряти return codes;
- робити code review.;</syntaxhighlight>
| ;</syntaxhighlight>
Типовий бізнес-процес: int *ptr = NULL; |
; Небезпечний приклад:
Makefile застосовується для автоматизації збірки.; printf("Run once\n"); історичний розвиток мови CСуть системного програмування: C надає можливість працювати близько до операційної системи, пам’яті, процесів і апаратного забезпечення.; } else { CMakeІнструменти: STATUS_ACTIVE, C — це компільована мова.; Змінна — це іменована область пам’яті для зберігання значення.; * Документація стандартної бібліотеки C.; int add(int a, int b); </syntaxhighlight>
Приклад: Типові ризики: Fuzz testingreturn 0; Мова C має кілька стандартів.; C у embedded популярна, з цієї причини що дає:
Константиprintf("Hello, world!\n");
Хороший C-код має бути: Приклад: КомпіляціяОсобливості масивів у C:
Основні проблеми:
'''struct''' надає можливість об’єднати кілька полів у один тип.; int result = add(2, 3);
<syntaxhighlight lang="cmake">
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
'''Практична порада:''' у проєкті потрібно явно знати, під який стандарт C пишеться код: C89, C99, C11, C17 або C23.; Програма має змогу працювати під час тесту, але падати в production.; return 1;
* Clang Static Analyzer;
* cppcheck;
* Coverity;
* PVS-Studio;
* GCC warnings;
* clang-tidy.; C
int i;
<syntaxhighlight lang="c">
=== Обчислення суми масиву ===
'''істотно:''' C створювалася як практична мова для реальних системних задач, з цієї причини в ній багато можливостей, які дають силу, але потребують дисципліни.; Водночас C потребує високої дисципліни: ручне керування пам’яттю, вказівники, undefined behavior і відсутність автоматичних перевірок можуть створювати серйозні помилки й security-ризики.; '''Перевага в embedded:''' C надає можливість писати ефективний код навіть для пристроїв із дуже обмеженою пам’яттю й процесором.;</div>
як ілюстрація:
$(CC) $(CFLAGS) -c utils.c
</div>
!; У цьому прикладі:
free(numbers);
<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
User user = {1, "Alice"};
C доцільно використовувати, коли потрібні:
</div>
if (age >= 18) { </div>
int main(void) { Приклад: $(CC) $(CFLAGS) main.o utils.o -o app numbers [0] = 10; printf("Adult\n");
return 1;
Основні групи: `while`: CFLAGS = -Wall -Wextra -std=c11 </syntaxhighlight> Рекомендовано: Приклад: void print_user(const User *user) { Критично: розіменування `NULL` pointer є собою помилкою й має змогу призвести до аварійного завершення програми.;User user = {1, "Alice"};
union Value {
У C написано багато системних компонентів, зокрема: C-код потрібно тестувати, особливо якщо він функціонує з пам’яттю, файлами, мережею або hardware.; `for`: Preprocessor обробляє директиви перед компіляцією.; while (fgets(line, sizeof(line), file) != NULL) { СтруктуриВідомі версії: Головна перевага: C дає максимальний контроль і високу ефективність при відносно простій моделі мови.;switch (status) { }
if (ptr != NULL) {
<syntaxhighlight lang="c">
Мова C була розроблена на початку 1970-х років у Bell Labs.;</syntaxhighlight> На C або з сильним впливом C створювалися: break; Pointer arithmeticУвага: pointer arithmetic дуже потужна, але помилки в ній можуть пошкодити пам’ять або створити вразливості.; $(CC) $(CFLAGS) -c main.c Практична роль: header files відокремлюють інтерфейс модуля від реалізації.; scanf("%7s", name); } Приклад:
== Стандарти C ==
perror("fopen");
}
</div>
Поширені sanitizers:
printf("%d\n", *ptr);
printf("Minor\n");
GCC застосовується для:
Clang відомий:
rm -f *.o app
int id;
=== Структура користувача ===
<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
int id;
'''Практична роль:''' у C помилки часто потрібно перевіряти явно після кожного ризикованого виклику.;
printf("User #%d: %s\n", user->id, user->name);
Стандартна бібліотека C надає базові функції для: int main(void) { </syntaxhighlight> /* use buffer */ count--;
Критично: кожен успішний `malloc`, `calloc` або `realloc` має бути логічно завершений `free`, інакше виникає memory leak.; * неініціалізовані змінні;
'''typedef''' створює нове ім’я для існуючого типу.;</div>
</div>
enum Status {
== Sanitizers ==
char name [8];
* простим;
* явним;
* добре структурованим;
* із перевіркою помилок;
* із зрозумілими іменами;
* із мінімумом глобальних змінних;
* із чітким ownership пам’яті;
* із документацією API;
* із тестами;
* із static analysis;
* із попередженнями компілятора.;<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
'''Суть прикладу:''' кожна C-програма має точку входу, і зазвичай це функція `main`.;<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
* мікроконтролери;
* сенсори;
* побутова техніка;
* автомобільні системи;
* IoT;
* industrial controllers;
* medical devices;
* embedded Linux.;== Clang ==
}
C і C++ пов’язані, але це різні мови.; '''Висновок:''' C дає простий і прямий контроль, а Rust намагається зберегти продуктивність системного рівня з сильнішими гарантіями безпеки пам’яті.; Критерій
/* math_utils.h */ Приклад: </syntaxhighlight> Масив — це послідовність елементів одного типу.; Перевага: C залишається важливою мовою, з цієї причини що надає можливість писати компактний, швидкий і близький до апаратного забезпечення код.; perror("fopen"); * арифметичні: `+`, `-`, `*`, `/`, `%`;
* порівняння: `==`, `!=`, `<`, `>`, `<=`, `>=`;
* логічні: `&&`, `||`, `!`;
* побітові: `&`, `|`, `^`, `~`, `<<`, `>>`;
* присвоєння: `=`, `+=`, `-=`, `*=`;
* інкремент і декремент: `++`, `--`;
* адреса й розіменування: `&`, `*`.;</div>
Приклад:
</div>
Константи використовуються для значень, які не повинні змінюватися.; STATUS_NEW,
<syntaxhighlight lang="c">
#ifndef CONFIG_H
#define CONFIG_H
#define MAX_SIZE 1024
#endif
{| class="wikitable"
== Вказівники ==
</div>
== Тематичні мітки ==
</div>
<syntaxhighlight lang="bash">
* введення-виведення;
* роботи з рядками;
* роботи з пам’яттю;
* математичних обчислень;
* роботи з файлами;
* обробки символів;
* часу;
* сортування;
* перетворення типів.;<syntaxhighlight lang="bash">
<syntaxhighlight lang="c">
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
C є собою класичною мовою системного програмування.; int id;
'''Практична роль:''' CMake часто використовують у більших C/C++ проєктах, де потрібна переносима платформа збірки.;
struct User { </div>
== переважні аспекти C ==
enum Status status = STATUS_ACTIVE;
== Синтаксис ==
Основні типи:
<syntaxhighlight lang="c">
#include <stdio.h>
</div>
} while (condition);
== Загальний характеристика ==
}
C має багато операторів.; '''Суть enum:''' enum робить код зрозумілішим, коли потрібно працювати з обмеженим набором станів.; Це означає, що вихідний код спочатку перетворюється компілятором на машинний код або об’єктні файли.; char *buffer = malloc(256);
set(CMAKE_C_STANDARD 11)
Вказівник або pointer — це змінна, яка зберігає адресу іншої змінної в пам’яті.; Критерій int main(void) { for (int i = 0; i < 5; i++) { printf("%d\n", i);
} </syntaxhighlight> Перша програма на CMakefileclang -Wall -Wextra -std=c17 main.c -o app Увага: макроси препроцесора не мають типів і можуть створювати складні для пошуку помилки.;== Змінні == int *numbers = malloc(5 * sizeof(int)); <div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
Приклад:
int *p = numbers;
* crashes;
* buffer overflows;
* parsing bugs;
* memory errors;
* unexpected states;
* security vulnerabilities.; * Документація cppcheck, Clang Static Analyzer, sanitizers і Valgrind.; Приклад:
} Приклад:
clean: </syntaxhighlight>
if (user == NULL) {
{{SEO printf("Unknown\n");
<syntaxhighlight lang="bash">
== Null pointer ==
char name [50];
#include <stdio.h>
Приклад: Функції допомагають: == Оператори ==
Суть вказівника: pointer надає можливість працювати не лише зі значенням, а й з адресою, де це значення зберігається.; Поширені header files: }; істотно: union потребує дисципліни, з цієї причини що програміст має знати, яке саме поле зараз є собою активним.; Інструменти можуть знаходити: clang -fsanitize=address -g main.c -o app Суть компіляції: код C перетворюється на виконувану програму до запуску, з цієї причини C має змогу бути дуже швидкою.; Це сильний інструмент для конкретних задач, а не універсальна відповідь на всі проблеми.; }
Приклад: printf("%s\n", destination);
</syntaxhighlight> const double PI = 3.1415926535; FILE *file = fopen("missing.txt", "r"); Приклад:
'''GCC''' або '''GNU Compiler Collection''' — один із найвідоміших компіляторів C.; Основні переважні аспекти мови C:
'''Небезпека:''' use-after-free, double free і memory leak є собою типовими помилками C-програм.; gcc main.c -o main
int main(void) {
<syntaxhighlight lang="c">
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
char destination [16];
char c;
<syntaxhighlight lang="c">
</div>
}
== Масиви ==
'''Практична роль:''' тестування в C особливо важливе, з цієї причини що багато помилок не ловляться автономно мовою.;<syntaxhighlight lang="c">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
printf("%d %s\n", user.id, user.name);
<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
Структури використовуються для:
'''Практична користь:''' typedef має змогу зробити код коротшим і зручнішим для читання, особливо зі структурами.;== Джерела ==
C дає багато контролю, але не захищає автономно від багатьох помилок.; '''Практична порада:''' C варто обирати тоді, коли контроль ресурсів важливіший за швидкість розробки й автоматичну безпеку.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
* memory optimization;
* binary protocols;
* embedded;
* parsers;
* variant-like structures;
* hardware registers.; * buffer overflow;
* use-after-free;
* double free;
* memory leak;
* integer overflow;
* format string vulnerabilities;
* dangling pointers;
* uninitialized memory;
* race conditions;
* unsafe string functions.; # Linking.; /* math_utils.c */
buffer = NULL; } додатково у C часто використовуються макроси: C часто використовує коди помилок.; C
}
Динамічна пам’ятьint numbers [5] = {1, 2, 3, 4, 5}; Практична роль: Makefile надає можливість не вводити довгі команди компіляції вручну щоразу.; C++ Цикли</syntaxhighlight> char name [] = "Alice"; C часто порівнюють із Rust, з цієї причини що обидві мови використовуються для системного програмування.;</syntaxhighlight> Суть умов: програма має змогу змінювати поведінку залежно від значень змінних і результатів перевірок.;</syntaxhighlight> CMake — популярна платформа генерації build-файлів для C і C++ проєктів.; Основні елементи синтаксису: return 0; char name [8]; main.o: main.c utils.h } Приклад: char name [50]; Приклад `CMakeLists.txt`: Стандартна бібліотека CПриклад include guard: Хороші практики Cfloat f;
return;
</div>
#include "math_utils.h"
додатково є собою `switch`:
!;== Header files ==
== Тестування C-коду ==
'''Функція''' — це іменований блок коду, який має змогу отримувати аргументи й повертати результат.; case 2:
== Типи даних ==
C має серйозні обмеження.; '''істотно:''' після відкриття файлу потрібно перевіряти помилки й закривати файл через `fclose`.; }
* ручне керування пам’яттю;
* ризик buffer overflow;
* undefined behavior;
* відсутність автоматичної перевірки меж масивів;
* складність безпечної роботи з рядками;
* немає вбудованих високорівневих структур даних;
* складність великих codebase;
* небезпечні casts;
* помилки pointer arithmetic;
* відсутність вбудованих exceptions;
* багато відповідальності на програмісті.; системного програмування забезпечується через '''C''' — це компільована мова програмування загального призначення, яка широко застосовується; додатково реалізовано embedded-розробки, операційних систем, драйверів, компіляторів, бібліотек, мережевого програмування, високопродуктивних застосунків і низькорівневої роботи з пам’яттю.;</div>
Приклад:
return 0;
Fuzzing сприяє знаходити:
Приклад корисних прапорців:
</div>
|-
| Парадигма
| Процедурна, низькорівнева
| Multi-paradigm: procedural, object-oriented, generic
|-
| Абстракції
| Мінімальні
| Класи, шаблони, RAII, STL
|-
| Runtime
| Дуже компактний
| має змогу бути складнішим
|-
| Використання
| Системи, embedded, kernels, libraries
| Застосунки, ігри, системи, high-performance software
|-
| Сумісність
| Близька історично
| Не є собою без ускладнень “C з класами” у сучасному вигляді
|}
</div>
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
int sum_array(const int *items, int count) {
'''Embedded C''' — це використання C для мікроконтролерів і вбудованих систем.; return a + b;
<syntaxhighlight lang="c">
|-
| Виконання
| Компіляція
| Інтерпретація або bytecode/runtime
|-
| Швидкість
| Дуже висока
| Зазвичай нижча для CPU-bound коду
|-
| Рівень
| Низькорівневий
| Високорівневий
|-
| Пам’ять
| Ручне керування
| Автоматичне керування
|-
| Типові задачі
| Системне ПЗ, embedded, бібліотеки
| Скрипти, automation, data science, web, AI
|}
if (file == NULL) {
== Робота з помилками ==
</div>
'''Критично:''' C-код, який функціонує з мережею, файлами, користувацьким input або системними ресурсами, потребує особливо уважного security review.;== malloc і free ==
!;<syntaxhighlight lang="c">
'''істотно:''' синтаксис C здається простим, але багато складності приховано в роботі з пам’яттю, вказівниками й undefined behavior.; * змінні;
* типи даних;
* оператори;
* умови;
* цикли;
* функції;
* масиви;
* вказівники;
* структури;
* макроси;
* header files.; * CERT C Coding Standard.;
Висновок: C++ виріс із C, але сучасний C++ має іншу культуру, інструменти й підхід до безпеки ресурсів.; int value = 10; unionC і LinuxКритично: C не перевіряє межі масиву автономно.; C і Python часто використовуються разом, але мають різні ролі.; * Документація GNU Make.;</syntaxhighlight> if (buffer == NULL) { } Embedded Cwhile (count > 0) {
int *ptr = &value; '''Практична користь:''' sanitizers допомагають оперативно знаходити memory bugs, які важко помітити вручну.; '''Undefined behavior''' — це ситуація, коли стандарт C не визначає, що має статися.; * операційні системи;
* ядра систем;
* компілятори;
* драйвери;
* embedded firmware;
* мережеві сервіси;
* бази даних;
* інтерпретатори мов;
* системні бібліотеки;
* графічні бібліотеки;
* високопродуктивні обчислювальні модулі.; return 1;
utils.o: utils.c utils.h
== Робота з файлами ==
== Static analysis ==
Сценарії:
|-
| Контроль пам’яті
| Ручний
| Контроль через ownership і borrow checker
|-
| Безпека
| Залежить від дисципліни програміста
| Більше перевірок на етапі компіляції
|-
| Простота мови
| Синтаксис відносно компактний
| Більше концепцій для вивчення
|-
| Legacy
| Дуже велика кодова база
| Молодша програмний пакет
|-
| Використання
| Embedded, OS, libraries, drivers
| Systems, services, security-sensitive software
|}
'''Критично:''' undefined behavior має змогу працювати “нормально” під час тесту, а потім зламатися після оптимізації, зміни компілятора або запуску на іншій платформі.;<syntaxhighlight lang="c">
</div>
'''Небезпека:''' багато помилок у C не завжди проявляються одразу.; * ISO C standards.; Мова C поєднує відносно простий синтаксис із дуже високим рівнем контролю над пам’яттю, процесором, структурами даних і системними ресурсами.; Її еволюція пов’язаний із розробкою операційної системи Unix.;== Стиль коду ==
=== Безпечніше копіювання рядка ===
'''істотно:''' C не потрібно використовувати всюди.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
{| class="wikitable"
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
Змінні в C мають:
'''Clang''' — сучасний компілятор C, C++ і Objective-C, побудований на LLVM.;<syntaxhighlight lang="c">
Рядок фактично виглядає так:
У C можна виконувати арифметику вказівників.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
const char *source = "Hello";
== Функції ==
double price = 19.99;
* `char`;
* `short`;
* `int`;
* `long`;
* `long long`;
* `float`;
* `double`;
* `long double`;
* `_Bool`;
* `void`.;<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
* достатньо високий рівень абстракції;
* доступ до пам’яті;
* можливість працювати з адресами;
* ефективний машинний код після компіляції;
* переносимість між різними платформами;
* компактний синтаксис.; * індексація починається з 0;
* розмір часто потрібно контролювати вручну;
* вихід за межі масиву небезпечний;
* масиви тісно пов’язані з вказівниками.; int count = 10;
C надає можливість вручну виділяти й звільняти пам’ять.; Критерій
default:
Порада: для типізованих констант краще використовувати `const`, а макроси залишати для випадків, де вони справді потрібні.; int sum = 0; У C є собою кілька типів циклів.; Підказка: у прикладах C істотно звертати увагу не лише на результат, а й на перевірки, розміри буферів і ownership пам’яті.; Поширені помилки: C має змогу бути не найкращим вибором для: enum надає можливість описувати набір іменованих констант.;* `#include <stdio.h>` підключає стандартну бібліотеку введення-виведення;
* `main` — головна функція програми;
* `printf` виводить текст;
* `return 0` означає успішне завершення програми.; gcc -Wall -Wextra -std=c11 main.c -o app
Приклад:
'''Основна ідея:''' C дає програмісту прямий контроль над пам’яттю й виконанням програми, з цієї причини її часто використовують там, де важливі швидкість, передбачуваність і близькість до апаратного рівня.; printf("%s", line);
'''malloc''' виділяє блок пам’яті.; '''істотно:''' знання C сприяє краще розуміти Unix/Linux, системні виклики, пам’ять, процеси й низькорівневі API.;
do {
printf("Blocked\n");
Вона застосовується для:
</div>
#include <stdio.h>
./main
Мова програмування C є собою однією з найвпливовіших мов в історії програмування.;</div>
Безпечніше обмежити розмір:
print_user(&user);
</div>
* тип;
* ім’я;
* значення;
* область видимості;
* час життя;
* адресу в пам’яті.; Приклади:
* низькорівневий контроль;
* висока продуктивність;
* embedded;
* мінімальний runtime;
* прямий доступ до hardware;
* системне програмування;
* бібліотеки для інших мов;
* drivers;
* kernels;
* resource-constrained systems;
* interoperability через C ABI.;== Обмеження C ==
* `<stdio.h>`;
* `<stdlib.h>`;
* `<string.h>`;
* `<math.h>`;
* `<ctype.h>`;
* `<time.h>`;
* `<stdint.h>`;
* `<stdbool.h>`;
* `<stddef.h>`.; * Документація CMake.; Приклади:
Приклади задач на CПрактичний висновок: Python зручний для швидкої розробки, а C — для продуктивних низькорівневих частин, бібліотек і системних компонентів.; Приклад: printf("Active\n");
Безпека в CКласичний приклад програми на C: == Коли C має змогу бути невдалим вибором ==
Приклад:
'''Практична роль:''' у C істотно розуміти розмір типів, діапазон значень і поведінку при переповненні.; Складність C полягає в пам’яті, ресурсах, undefined behavior і безпеці.; Ritchie.; printf("%d\n", *(p + 1));
== Buffer overflow ==
'''Мова програмування C''' — це фундаментальна компільована мова для системного, embedded і високопродуктивного програмування.;</div>
'''істотно:''' робота з рядками в C потребує уважності, з цієї причини що потрібно враховувати розмір буфера і завершальний символ `\0`.;<syntaxhighlight lang="c">
'''Header files''' мають розширення `.h` і використовуються для оголошень.;<syntaxhighlight lang="c">
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
* unit tests;
* integration tests;
* fuzz testing;
* static analysis;
* sanitizers;
* valgrind;
* code review;
* regression tests;
* boundary tests;
* failure tests.;
Перевага: Clang часто зручний для розробки, з цієї причини що дає зрозумілі diagnostics і добре інтегрується з інструментами аналізу.; # Assembly.; STATUS_BLOCKED Висновокcount = count + 1; int main(void) {
gcc -Wall -Wextra -Wpedantic -std=c11 main.c -o app } Приклади інструментів: } FILE *file = fopen("data.txt", "r");
Типові помилки початківцівfclose(file); У C рядок — це масив символів, який завершується нульовим символом `'\0'`.; int age = 25; GCCint add(int a, int b) { C має особливе значення для Linux-екосистеми.; Суть функції: функція перетворює вхідні інформаційні дані на результат або виконує певну дію.; typedef struct { return 1; Головне правило стилю: у C краще писати трохи більше явного коду, ніж приховувати складну поведінку в макросах і неочевидних pointer-трюках.; Вона стала основою для багатьох інших мов і технологій.; C </syntaxhighlight> snprintf(destination, sizeof(destination), "%s", source);
Sanitizers — це інструменти runtime-перевірки.; Практична роль: цикли потрібні для повторення дій: обробки масивів, читання даних, обчислень і роботи з потоками.; `do while`: A l i c e \0 char name [50]; return 0;
struct User user = {1, "Alice"};
cmake_minimum_required(VERSION 3.16) ./app char grade = 'A';
|
; } User;
Приклад: Static analysis — це аналіз коду без запуску програми.; Файл реалізації: </syntaxhighlight> }
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
C має компактний синтаксис, який вплинув на багато інших мов: C++, Java, JavaScript, C#, Go, Rust і багато інших.; }
project(MyApp C)
Приклади директив: |
; free(buffer);
Коли варто використовувати C char line [256];
scanf("%s", name);
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
C надає можливість працювати з файлами через `FILE*`.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Union застосовується в низькорівневих сценаріях:
printf("%d\n", numbers [0]);
Приклад: </syntaxhighlight> if (numbers == NULL) { } User; for (int i = 0; i < count; i++) {
sum += items [i];
}
return sum; } int main(void) { int numbers [] = {1, 2, 3, 4, 5};
int result = sum_array(numbers, 5);
printf("Sum: %d\n", result);
return 0;
} </syntaxhighlight> Fuzz testing — це тестування випадковими, напіввипадковими або згенерованими input-даними.;</syntaxhighlight>
NULL pointer — це вказівник, який не вказує на дійсний об’єкт.; Практична роль: struct надає можливість створювати власні типи даних і групувати пов’язані поля.; * Програмування
return 0; |
|---|