Counter-Strike 2

Counter-Strike 2

Zbyt mało ocen
Кодим на C | C Programming
Autorstwa: Dr. L
Руководство по программированию на языке C в Linux для начинающих.
   
Przyznaj nagrodę
Ulubione
Ulubione
Usuń z ulubionych
Введение
Добро пожаловать в мир программирования на языке C, в этой версии мы будем кодить на линуксе! Это руководство предназначено для тех, кто хочет начать с нуля и постепенно освоить программирование на языке Cи (С language, обычно на русском языке читают как "Си"), используя операционную систему Linux. Мы рассмотрим установку необходимых инструментов, основы синтаксиса языка, а также более продвинутые темы.
Введение в язык C
Язык программирования C был разработан в начале 1970-х годов Деннисом Ритчи в Bell Labs. C считается одним из наиболее влиятельных языков программирования, благодаря своей эффективности, гибкости и близости к системному программированию. Многие современные языки, такие как C++, C#, Java и другие, заимствовали концепции из C.

Преимущества языка C:
  • Высокая производительность
  • Контроль над системными ресурсами
  • Широкое применение в системном программировании, разработке драйверов, встроенных систем и многом другом
  • Большое сообщество и обширная документация

Так же стоит добавить, что существует много разных версий Си, разные стандарты, и так далее. Учитывайте это перед началом работы!
Настройка среды разработки в Linux
Перед началом программирования на C необходимо установить необходимые инструменты и настроить среду разработки.

Установка компилятора GCC

GCC (GNU Compiler Collection) — это мощный компилятор, который поддерживает язык C и многие другие языки программирования.

  • Проверка установки GCC:
    • Откройте терминал и введите:
    gcc --version
  • Если GCC установлен, вы увидите версию компилятора. Если нет, продолжайте установку.

Установка GCC:

  • Для дистрибутивов, основанных на Debian (например, Ubuntu):
      sudo apt update sudo apt install build-essential
  • Для Fedora:
      sudo dnf groupinstall "Development Tools"
  • Для Arch Linux:
      sudo pacman -S base-devel

Выбор текстового редактора или IDE

Вы можете использовать любой текстовый редактор или интегрированную среду разработки (IDE) по вашему выбору. Вот некоторые популярные варианты:

  • Текстовые редакторы:
    • Vim: Мощный и настраиваемый редактор.
    • Emacs: Гибкий редактор с множеством плагинов.
    • Visual Studio Code: Современный редактор с поддержкой расширений.
  • IDE:
    • Code::Blocks: Простая в использовании IDE для C/C++.
    • CLion: Платная, но мощная IDE от JetBrains.
    • Eclipse CDT: Расширение для Eclipse, поддерживающее C/C++.

Для начала рекомендуем использовать Visual Studio Code из-за его простоты и богатого набора расширений.


Установка Visual Studio Code:

  • Перейдите на официальный сайт VS Code[code.visualstudio.com] и скачайте пакет для вашей системы.
  • Установите скачанный пакет с помощью менеджера пакетов вашего дистрибутива.

P.s. Все кто спросят: -"Почему Visual Studio Code отнесли к текстовым редакторам, это же по сути IDE для разработки?", отвечу, что VSC не направлен напрямую на разработку на Си, это в целом редактор текста и на нем можно писать код почти для любого языка.
Основы синтаксиса языка C
Давайте рассмотрим основные элементы языка C, необходимые для написания простых программ.

Структура программы на C
Каждая программа на C состоит как минимум из одной функции — main. Вот пример самой простой программы:
#include <stdio.h> int main() { printf("Hello, World!\n"); return 0; }

Объяснение:
  • #include <stdio.h> — подключение стандартной библиотеки ввода-вывода.
  • int main() — основная функция программы.
  • printf — функция вывода текста на экран.
  • return 0; — завершение программы с кодом возврата 0.

Переменные и типы данных
В C переменные должны быть объявлены с указанием типа данных. Основные типы:
  • int — целые числа.
  • float — числа с плавающей запятой.
  • double — числа с двойной точностью.
  • char — символы.
  • void — отсутствие типа.

Пример:
int age = 25; float height = 5.9; double weight = 70.5; char grade = 'A';

Операторы
C поддерживает множество операторов:
  • Арифметические операторы: +, -, *, /, %
  • Операторы присваивания: =, +=, -=, *=, /=, %=
  • Сравнения: ==, !=, >, <, >=, <=
  • Логические операторы: &&, ||, !
  • Битовые операторы: &, |, ^, ~, <<, >>

Пример:
int a = 10, b = 20; int sum = a + b; int isEqual = (a == b); // возвращает true если a равен b, в ином случае возвращает false int isGreater = (a > b); // возвращает true если a больше b, в ином случае возвращает false

Управляющие конструкции
Условные операторы
Условные операторы - операторы для работы с переменными. Эти операторы называются условными, потаму что имеют условие, в котором возвращают true или false (ну или в случае switch переходят к оперделённой инструкции).

if-else:
int number = 10; if (number > 0) { printf("Положительное число\n"); } else if (number < 0) { printf("Отрицательное число\n"); } else { printf("Ноль\n"); }

В данном примере мы инициализируем число number (это название переменной) и присваиваем её значение 10. Дальше мы проверяем, если number больше 0, то мы выводим в консоль "Положительное число" (\n переводит строку на новую, и переводиться как newline), если нет, то мы возвращаем false, или переходим к следующей инструкции если после этого сравнения есть else. Дальше, где else if (number < 0), мы делаем так:
Если первое сравнение(if (number > 0)) возвращает false, то мы переходим к следующей инструкции, а там у нас if (number < 0) , то есть, мы проверяем, отрицательное ли число number, если да, то мы возвращаем в консоль строку "Отрицательное число".
Ну а если и вторая инструкция не вернула true, мы возвращаем в консоль строку "Ноль".

switch:
char grade = 'B'; switch (grade) { case 'A': printf("Отлично!\n"); break; case 'B': printf("Хорошо!\n"); break; case 'C': printf("Удовлетворительно\n"); break; default: printf("Неизвестная оценка\n"); }

Тут просто выполняется определённая инструкция, в зависимости от значения переменной grade

Циклы

for:
for (int i = 0; i < 5; i++) { printf("i = %d\n", i); }

while:
int i = 0; while (i < 5) { printf("i = %d\n", i); i++; }

do-while:
int i = 0; do { printf("i = %d\n", i); i++; } while (i < 5);

Функции
Функции позволяют структурировать код и переиспользовать его.

Объявление и определение функции:
#include <stdio.h> // Объявление функции int add(int a, int b); int main() { int result = add(5, 3); printf("Результат: %d\n", result); return 0; } // Определение функции int add(int a, int b) { return a + b; }

Параметры и возвращаемые значения:
  • Функции могут принимать параметры и возвращать значения.
  • Тип возвращаемого значения указывается перед именем функции.
  • Если функция не возвращает значение, используется тип void.

Продвинутые темы
После освоения основ, пора перейти к более сложным концепциям языка C.
Так же хочу сказать, что эти "Продвинутые темы" очень сложные для понимания новичкам, и особо не понадабятся на практике новичкам в этом языке.


Указатели
Указатели — переменные, хранящие адреса других переменных.
Объявление и использование:
int var = 10; int *ptr = &var; // ptr хранит адрес переменной var printf("Значение var: %d\n", var); printf("Адрес var: %p\n", (void*)&var); printf("Значение ptr: %p\n", (void*)ptr); printf("Значение через ptr: %d\n", *ptr);

Важно:
  • & — оператор взятия адреса.
  • * — оператор разыменования указателя.

P.s. Тема указателей и ссылок довольно сложная для понимания, так что можете особо не углубляться в её тему.

Динамическое управление памятью
Используется для выделения и освобождения памяти во время выполнения программы.
Функции:

  • malloc — выделение памяти.
  • calloc — выделение и инициализация памяти.
  • realloc — изменение размера выделенной памяти.
  • free — освобождение памяти.



Из за техничческих проблем со стороны стима не удалось сделать вставку с кодом :(


Структуры и объединения
Структуры позволяют объединять различные типы данных под одним именем, это похоже на классы в С++ или питоне, но здесь нет инкапсуляции, конструкторов и встраиваемых методов.

struct Person { char name[50]; int age; float height; };

Препроцессорные директивы

Препроцессорные директивы обрабатываются до компиляции и начинаются с символа #.

Основные директивы:
  • #include — подключение файлов заголовков.
  • #define — определение макросов.
  • #ifdef, #ifndef, #endif — условная компиляция.

Пример использования #define:
#include <stdio.h> #define PI 3.14159 #define SQUARE(x) ((x) * (x)) int main() { printf("PI = %f\n", PI); printf("SQUARE(5) = %d\n", SQUARE(5)); return 0; }

Компиляция кода
Компиляция — это процесс преобразования исходного кода, написанного на языке программирования (в данном случае на языке C), в исполняемый файл, который может быть запущен на компьютере. В Linux для компиляции программ на языке C чаще всего используется компилятор GCC (GNU Compiler Collection). В этом разделе мы подробно рассмотрим процесс компиляции, основные команды и опции компилятора GCC, а также лучшие практики при компиляции программ на C.

Этапы компиляции
Компиляция программы на языке C включает несколько этапов:

  • Препроцессинг (Preprocessing):
    • Обработка директив препроцессора (#include, #define и т.д.).
    • Замена макросов и включение содержимого заголовочных файлов.
  • Компиляция (Compilation):
    • Преобразование препроцессированного кода в ассемблерный код.
    • Проверка синтаксиса и семантики программы.
  • Ассемблирование (Assembly):
    • Преобразование ассемблерного кода в объектный код (машинные инструкции).
  • Линковка (Linking):
    • Объединение объектных файлов и библиотек в единый исполняемый файл.
    • Разрешение ссылок на функции и переменные между файлами.

Компиляция кода
Компиляция кода проводится в терминале, это конечный этап нашего написания программы (если она из одного файла). Откройте терминал и перейдите в директиву с вашим кодом (допустим, что это main.c). Вставте следующий код в терминал:
gcc main.c -o main
После этого, в вашей дериктиве появится файл main, вы можете открыть его с помощью команды:
./main
Ну вот, если не произошло никаких ошибок, то можете считать, что вы сделали все правильно!
Лучшие практики программирования на C
Следование лучшим практикам помогает писать чистый, эффективный и поддерживаемый код.

  • Чистый код:
    • Используйте понятные имена переменных и функций.
    • Комментируйте сложные участки кода.
    • Соблюдайте единый стиль кодирования.
  • Управление памятью:
    • Всегда освобождайте динамически выделенную память с помощью free.
    • Проверяйте результат функций выделения памяти (malloc, calloc).
  • Обработка ошибок:
    • Проверяйте возвращаемые значения функций на предмет ошибок.
    • Используйте механизмы обработки ошибок, такие как возврат кодов ошибок.
  • Использование заголовочных файлов:
    • Разделяйте объявления и определения.
    • Избегайте циклических зависимостей.
  • Модульность:
    • Разбивайте программу на модули (файлы .c и .h), каждый из которых отвечает за определенную функциональность.
  • Использование констант:
    • Вместо магических чисел используйте #define или const для улучшения читаемости.
  • Компиляция с предупреждениями:
    • Компилируйте с флагами -Wall -Wextra, чтобы получать предупреждения о потенциальных проблемах.


Конец
Надеюсь вам понравиломь данное руководство и вы извлекли урок из всего, что я вам рассказал. Это не совсем полное руководство по языку Си, но всего, о чем тут написанно достаточно для минимальной программы на Си.
Можете задавать вопросы в комменты, оценить руководство и наградить его! Спасибо :3








Другие руководства:
https://steamoss.com/sharedfiles/filedetails/?id=3387288971
https://steamoss.com/sharedfiles/filedetails/?id=3197737260
https://steamoss.com/sharedfiles/filedetails/?id=3386163984

Примеры кода на Си:
https://github.com/cbFelix/c-examples
Их там пока что не очень много, но со временем будут обновления и новинки.
Komentarzy: 1
Tofca 4 stycznia o 5:18 
я прочитал, удаляй