2-bo‘lim

Muhitni sozlash va birinchi dastur

Windows, Linux va macOS da kompilyator o'rnatish, Notepad++ va Sublime Text ni sozlash, birinchi dasturni yozib ishga tushirish.

🕑 14 daqiqa o‘qish 📄 776 so‘z 👁 5 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Kompilyator nima qiladi?
  2. Kompilyator o'rnatish
  3. Windows
  4. Linux
  5. macOS
  6. Tekshirish
  7. Matn muharririni sozlash
  8. Notepad++
  9. Sublime Text
  10. Birinchi dastur
  11. Har bir qator nima qiladi?
  12. Kompilyator xatolarini o'qish
  13. Chiqish kodini tekshirish
  14. Ish papkasini tashkil qilish
  15. Xulosa

C kodini ishga tushirish uchun ikki narsa kerak: matn muharriri va kompilyator.

Kompilyator nima qiladi? #

Kod dasturga qanday aylanadi dastur.c Siz yozgan kod Preprotsessor #include ochiladi Kompilyator dastur.o Bog'lovchi kutubxonalar dastur ishga tayyor Muhim farq Python kodni har safar o'qiydi; C esa bir marta mashina kodiga aylantiradi
Kompilyatsiya - kodni protsessor tushunadigan tilga tarjima qilish

Kompilyator o'rnatish #

Windows #

Windows uchun eng qulay yo'l - MSYS2 orqali GCC o'rnatish.

Natija
1. https://www.msys2.org saytidan o'rnatuvchini yuklab oling
2. O'rnating (standart yo'l: C:\msys64)
3. "MSYS2 UCRT64" oynasini oching va quyidagini yozing:
Terminal
pacman -S mingw-w64-ucrt-x86_64-gcc

So'ng GCC ni tizim yo'liga (PATH) qo'shing:

Natija
1. Windows qidiruvida "environment variables" deb yozing
2. "Edit the system environment variables" ni oching
3. "Environment Variables..." tugmasini bosing
4. "Path" ni tanlab "Edit" bosing
5. "New" bosib quyidagini qo'shing:  C:\msys64\ucrt64\bin
6. OK bosing va yangi cmd oynasini oching
Muqobil yo'l

Agar MSYS2 murakkab tuyulsa, w64devkit ni ishlating - bitta zip fayl, o'rnatish shart emas: github.com/skeeto/w64devkit. Uni papkaga chiqarib, bin papkasini PATH ga qo'shing.

Linux #

Terminal
# Ubuntu / Debian
sudo apt update
sudo apt install build-essential

# Fedora
sudo dnf install gcc

# Arch
sudo pacman -S base-devel

macOS #

Terminal
xcode-select --install

Tekshirish #

Terminal
gcc --version
Natija
gcc (GCC) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.

Versiya raqami boshqacha bo'lishi mumkin - muhimi, xatolik chiqmasligi.

«gcc is not recognized» xatosi

Bu xabar GCC o'rnatilmagan yoki PATH ga qo'shilmaganini bildiradi.

Tekshiring:

  1. Yangi terminal oynasini oching - eski oyna eski PATH ni saqlaydi.
  2. C:\msys64\ucrt64\bin papkasida gcc.exe bormi?
  3. PATH ga to'g'ri papka qo'shilganmi (bin bilan tugashi kerak).

Matn muharririni sozlash #

Notepad++ #

  1. notepad-plus-plus.org dan yuklab oling.
  2. Sozlamalar:
SozlamaQiymatQayerda
KodlashUTF-8 (BOM siz)Encoding menyusi
TilCLanguage -> C
Tab4 probelSettings -> Preferences -> Language
Qator oxiriUnix (LF)Edit -> EOL Conversion
  1. Kompilyatsiyani tugmaga bog'lash (NppExec plagini orqali):
Natija
Plugins -> Plugin Admin -> NppExec ni o'rnating
Plugins -> NppExec -> Execute...  (F6)
Natija
npp_save
cd "$(CURRENT_DIRECTORY)"
gcc -std=c17 -Wall -Wextra -g "$(FILE_NAME)" -o "$(NAME_PART).exe"
"$(NAME_PART).exe"

Buni Save... tugmasi bilan «Kompilyatsiya» nomi ostida saqlang va Plugins -> NppExec -> Advanced Options orqali klaviatura tugmasiga bog'lang.

Sublime Text #

sublimetext.com dan yuklab oling, so'ng Tools -> Build System -> New Build System... ni tanlang va quyidagini saqlang (C_dastur.sublime-build nomi bilan):

JSON
{
    "cmd": ["gcc", "-std=c17", "-Wall", "-Wextra", "-g", "$file", "-o", "${file_base_name}"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c",

    "variants": [
        {
            "name": "Ishga tushirish",
            "shell": true,
            "cmd": ["gcc -std=c17 -Wall -Wextra -g \"$file\" -o \"${file_base_name}\" && \"./${file_base_name}\""]
        }
    ]
}

Endi Ctrl+B kodni kompilyatsiya qiladi, Ctrl+Shift+B esa kompilyatsiya qilib ishga tushiradi.

Bayroqlarni tushunish
BayroqMa'nosi
-std=c17C17 standartidan foydalanish
-WallBarcha odatiy ogohlantirishlarni ko'rsatish
-WextraQo'shimcha ogohlantirishlar
-gNosozliklarni tuzatish ma'lumotini qo'shish
-o nomNatija faylining nomi

-Wall -Wextra ni doim ishlating. Kompilyator ogohlantirishi - bu kelajakdagi xatolik haqidagi bepul maslahat.

Birinchi dastur #

salom.c nomli fayl yarating:

C
#include <stdio.h>

int main(void) {
    printf("Salom, dunyo!\n");
    printf("Mening ismim Husanboy.\n");
    return 0;
}

Kompilyatsiya qiling va ishga tushiring:

Terminal
gcc -std=c17 -Wall -Wextra salom.c -o salom
./salom

Windows'da:

Terminal
gcc -std=c17 -Wall -Wextra salom.c -o salom.exe
salom.exe
Natija
Salom, dunyo!
Mening ismim Husanboy.

Har bir qator nima qiladi? #

Birinchi dastur ichidan #include <stdio.h> int main (void) { printf ( "Salom!\n" ); return 0 ; } ← Kutubxonani ulaydi ← Dastur shu yerdan boshlanadi ← Ekranga matn chiqaradi ← «Xatosiz tugadim» degani ← Funksiya tugadi Har bir buyruq nuqtali vergul (;) bilan tugaydi
Beshta qator - lekin har birining aniq vazifasi bor
  • #include <stdio.h> - «standard input/output header». printf funksiyasi shu faylda e'lon qilingan. Usiz kompilyator printf ni bilmaydi.
  • int main(void) - dastur ishga tushganda birinchi bo'lib shu funksiya chaqiriladi. void - «hech qanday argument qabul qilmaydi» degani.
  • printf(...) - ekranga matn chiqaradi. \n yangi qatorga o'tkazadi.
  • return 0; - operatsion tizimga «dastur muvaffaqiyatli tugadi» deb xabar beradi. Nol bo'lmagan son xatolikni bildiradi.
\n ni unutmang

printf avtomatik yangi qatorga o'tmaydi. Bu Python'dagi print() dan asosiy farq.

C
printf("Birinchi");
printf("Ikkinchi");

Natija: BirinchiIkkinchi - bir qatorda.

Kompilyator xatolarini o'qish #

Ataylab xato qilamiz - nuqtali vergulni tashlab yuboramiz:

C
#include <stdio.h>

int main(void) {
    printf("Salom!\n")
    return 0;
}
Natija
salom.c: In function 'main':
salom.c:4:24: error: expected ';' before 'return'
    4 |     printf("Salom!\n")
      |                       ^
      |                       ;
    5 |     return 0;
      |     ~~~~~~
Xato xabarini qanday o'qish kerak
Natija
salom.c : 4 : 24 : error : expected ';' before 'return'
   ↑      ↑    ↑     ↑              ↑
 fayl   qator ustun  tur         tavsif

Kompilyator hatto nimani qo'shish kerakligini ham ko'rsatib turibdi.

Muhim qoida: birinchi xatodan boshlang. Bitta unutilgan qavs o'nlab keyingi xatoni keltirib chiqaradi - birinchisini tuzatsangiz, qolganlari ham yo'qoladi.

Chiqish kodini tekshirish #

return 0; qaytargan qiymatni operatsion tizim ko'radi:

Terminal
./salom
echo $?
Natija
Salom, dunyo!
Mening ismim Husanboy.
0

Windows'da: echo %ERRORLEVEL%.

Bu skriptlar uchun muhim: dastur muvaffaqiyatli tugadimi yoki yo'qmi - shu son orqali bilinadi.

Ish papkasini tashkil qilish #

Natija
C-darslik/
├── 01-salom/
│   ├── salom.c
│   └── salom.exe
├── 02-ozgaruvchilar/
│   └── ozgaruvchilar.c
└── 03-sikllar/
    └── sikllar.c
Kompilyatsiya natijasini saqlamang

.exe va .o fayllari kod emas - ular har safar qaytadan yaratiladi. Git ishlatsangiz, .gitignore fayliga qo'shing:

Natija
*.exe
*.o
*.out
Amaliy topshiriq
  1. Kompilyatorni o'rnating va gcc --version bilan tekshiring.
  2. Notepad++ yoki Sublime Text ni sozlang.
  3. salom.c faylini yarating va ishga tushiring.
  4. Matnni o'z ismingizga o'zgartiring.
  5. Yana ikkita printf qo'shing.
  6. Bitta printf da \n ni olib tashlang va natijani ko'ring.
  7. Nuqtali vergulni ataylab o'chirib, xato xabarini o'qing.
  8. return 0; ni return 42; ga o'zgartiring va chiqish kodini tekshiring.
  9. -Wall -Wextra bayroqlarisiz va ular bilan kompilyatsiya qilib solishtiring.
  10. C-darslik papkasini yaratib, tartibli ish boshlang.

Xulosa #

  • C kodini ishga tushirish uchun kompilyator kerak - odatda GCC.
  • Windows'da MSYS2 yoki w64devkit, Linux'da build-essential, macOS'da xcode-select --install.
  • Kompilyatsiya to'rt bosqichdan iborat: preprotsessor, kompilyator, assembler, bog'lovchi.
  • #include <stdio.h> - printf uchun zarur.
  • main funksiyasi - dasturning kirish nuqtasi.
  • Har bir buyruq nuqtali vergul bilan tugaydi.
  • printf avtomatik yangi qatorga o'tmaydi - \n kerak.
  • -Wall -Wextra bayroqlarini doim ishlating.
  • Xatoni tuzatishda birinchisidan boshlang.

Keyingi bo'limda dastur tuzilishini va sintaksis qoidalarini batafsil ko'ramiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.