C Proqramlaşdırma Dili

Giriş

Giriş

Bu mətndə C dilində proqram tərtibindən bəhs olunur. Mətndən tələbələr, məktəblilər, informatika fənnini tədris edən müəllimlər, sistem inzibatçıları və ümumilikdə, C (si) proqramlaşdırma dilini öyrənmək istəyən kər kəs istifadə edə bilər. Bu mətndən istifadə edə bilmək üçün ilkin olaraq, heç bir proqramlaşdırma dilini bilmək tələb olunmur.

Kompüterlər, proqramlar, proqramlaşdırma dilləri, əməliyyat sistemləri

Proqram anlayışını daxil etməzdən və C dilinin müasir İnformasiya və Kommunikasiya Texnologiyalarında yeri barədə söz açmazdan öncə, gəlin, əvvəl bu günkü həyatımızda kompüterlərin və proqramların oynadığı rola sadə bir nəzər salaq. Kompüterlər, demək olar ki, hər yerdə - məişətdə, təhsildə, tibbdə, sənayedə və s. yerlərdə çox geniş istifadə olunur. Məsələn, NASA–da kosmik gəmilər, süni peyklər, zavodlarda mürəkkəb istehsal prosesləri kompüterlər vasitəsilə idərə olunur. Milyardlarla insan məlumatları, içərisində axtarış parametrlərinə uyğun gələnini kompüterin verilənlər bazasından çox az bir zaman ərzində (saniyənin kiçik bir hissəsi) tapır. Adi istifadəçilər kompüterlə müxtəlif oyunlar oynayır, hər hansı mətn və ya cədvəl üzərində işləyir və s.
Arxitektura cəhətdən dünyada mövcud olan əksər kompüterlər arasında elə də böyük fərq yoxdur. Yəni evdə istifadə etdiyimiz komputerlə NASA–da istifadə olunan kompüterlər bir-birindən əsasən, yaddaş və sürətinə görə fərqlənir. Bəs niyə biz öz kompüterimizlə hansısa kosmik gəmiləri idarə etmirik? Kompüterlərə bu qədər müxtəlif işlər yerinə yetirməsinə imkan verən nədir? Niyə hansısa kompüterlə hər hansı işi görmək olar, digəri ilə yox? Kompüterə ümumiyyətlə istənilən bir işi görə bilməsinə imkan verən nədir? Əlbəttə ki, proqram. Məhz proqram kompüterə hansı işlər görməli olduğunu tam detalları ilə bildirir. Proqramsız kompüter tamamilə yararsız bir dəmir parçasıdır. Proqramı isə, əlbəttə ki, proqramçılar tərtib edir. Bu iş son dərəcə çətin və məsuliyyətlidir. Proqramın hazırlanma prosesi, onun daxili strukturu və yerinə yetirilmə prosesi kifayət qədər mürəkkəb məsələlərdir və bu məsələrlə məşğul olmaq təcrübə tələb edir. Biz hələlik proqramın hazırlanması ilə məşğul olacağıq. Biz proqramın mətn kodunu C dilində yazırıq, daha sonra, xüsusi proqramlar vasitəsilə, bizim mətndən icra olunan proqram alınır.
İndi isə, bir qədər C dili barəsində danışaq.
C dili haqda Wikipedia-da kifayət qədər məlumat verilib. Qısa olaraq onu demək olar ki:
1. C dilinin sintaksisi C++, JAVA, PHP dillərinin sintaksisi ilə eynidir (buradan isə o çıxır ki, bütün bu dillərin sintaksisi eynidir :)). Bu, C dilini (və ya bu dillərdən hər hansı birini) bilməklə, digərlərinə keçməni xeyli asanlaşdırır.
2. C dilində yazılan proqramlar çox sürətli və təhlükəsiz olduğundan, ciddi proyektlər, əsasən bu dildə yaradılır. Buraya əməliyyatlar sistemləri (bütün Unix tipli sistemlərin hamısı C dilində yazılıb), Google axtarış sistemi və bir çox digər proqramları aid etmək olar. Bu siyahını istənilən qədər uzatmaq olar. Lakin C dilinin bu günkü gündə rolunu anlamaq üçün "bütün Unix tipli əməliyyatlar sistemi anlayışına" nəzər salmaq kifayətdir.
Unix tipli əməliyyatlar sistemlərinin dəqiq siyahısını vermək mümkün deyil. FreeBSD, OpenBSD, Solaris, HP_UX, AIX və xakerlərin sevimlisi GNU/Linux (çünki tamamilə xakerlər tərəfindən yaradılıb) sistemlərini bu siyahının parlaq nümunələri kimi misal göstərmək olar. Unix tipli anlayışına müəyyən qədər aydınlıq gətirdik, indi isə, əməliyyatlar sisteminin nə demək olduğuna baxaq.
Əməliyyatlar sistemi sadəcə və sadəcə müəyyən qrup proqramlar yığınıdır. Ancaq proqramlar, ayrı heç nə. Buraya müxtəlif server proqramları - webserver (Apache...), File server (FTP server...), məlumatlar bazası proqramları (Oracle, MySQL...), kompilyator, assembler, linker proqramları (proqram tərtib etmək üçün), mətn redaktorları, shell proqramları (digər proqramları yükləmək və icra etmək üçün), arxiv proqramları (tar, gzip... - faylların həcmini kiçiltmək üçün), 100-lərlə, 1000-lərlə digər proqramlar və əlbəttə ki, ən əsası, nüvə (kernel) proqramı daxildir. Təsəvvür edin, bu qədər proqramın hamısı C dilində yazılıb.
İndi isə, ən maraqlısı – nüvə. Nüvə proqramı kompüter əməliyyatlar sisteminin ən əsas proqramıdır. Bu proqram sistemin fəaliyyətinə tam olaraq nəzarət edir. O, əməliyyatlar sisteminin digər proqramlarının fəaliyyəti üçün lazim olan bütün funksiyaları özündə cəmləyir. Xüsusi olaraq, buraya kompüterin qurğularının idarə olunması (driver-lər), yaddaşının idarə olunması (memory management), proseslərin (yerinə yetirilən proqramların) idarə olunması, faylların idarə olunması, şəbəkənin idarə olunması (networking), kompüterin digər resurslarının və s. idarə olunması daxildir. Beləliklə, C dilini mükəmməl bilmək mənbə kodları açıq şəkildə verilən bu proqramları (bəziləri istisna olmaqla – Oracle və s.) başa düşməyə və müəlliflər tərəfindən verilmiş imkanlar daxilində (GPL, OSL, və s. lisenziyaları) bu proqramları dəyişib istifadə etməyə imkan verir.

C proqramlaşdırma dili

İlk proqram.
Bu mövzuda biz ilk proqramı yerinə yetirmək barədə danışacağıq. Yəni C dilində proqram yazmaq üçün bizə nə lazımdır, bunları haradan əldə edə və necə işlək vəziyyətə gətirə bilərik. Sonda hər şeyin qaydasında olduğunu yoxlamaq məqsədilə, test proqram yerinə yetirəcəyik.
C dilində və istənilən digər dildə proqram yazmaq üçün bizə kompüter, əməliyyatlar sistemi, kompilyator və mətn redaktoru proqramları lazımdır. Kompüter məsələsi aydındır.
Əməliyyatlar sistemi - hal-hazırda geniş yayılmış 2 əməliyyatlar sistemi ailəsi mövcuddur: Unix tipli sistemlər və Windows sistemləri ailəsi.

Windows əməliyyatlar sistemi
Windows istifadəçilər üçün çox rahatdır, amma Windows-la bağlı bir çox proqramçıların mövqeyi müsbət deyil. Məsələ ondadır ki, bir çox CPU (prosessor) arxitekturaları qoruyucu rejimdə (əsas işçi rejim) işlədikdə yaddaşı (RAM) seqmentlərə bölür və bir seqmentin proqram kodunun digər seqmentə müraciət etməsinin qarşısını alır (qoruyur). Belə halda, kompüterdə yerinə yetirilən proqramlar 2 qrupa bölünür.

Yüksək prioritetli seqmentlərə yüklənmiş proqramlar.
Bu proqram kodlarına nüvə(kernel) kodu aiddir. Driverlər, yaddaşın, şəbəkənin, fayllar sisteminin, proseslərin idarə olunması və bir çox digər işləri yerinə yetirən proqram kodları bu qrupa daxildir. Bu proqramlar kompüterin bütün resurslarına (portlar və s.) tam nəzarət edir və onlar yaddaşın istənilən seqmentinə istənilən müraciəti edə bilərlər.

Aşağı prioritetli seqmentlərə yüklənmiş proqramlar.
Bu proqramlara kompüterə yüklənmiş yerdə qalan proqramlar - istifadəçi proqramları aiddir.

Windows sistemi öz nüvəsinin proqram kodlarını gizli saxlayır. Bu isə, öz proqramlaşdırma biliyini daha da inkişaf etdirmək istəyən proqramçılara maneə yaradır.

Unix tipli sistemlər (GNU/Linux, FreeBSD, Solaris, AIX...)
Unix sistemləri proqramçılar tərəfindən yaradılıb və bütün proqram kodları açıqdır. Kompüter arxitekturasını öyrənmək istəyən proqramçılar üçün Unix əvəzedilməz əməliyyatlar sistemidir. Unix sistemləri həm interfeys, həm də daxili struktur baxımından bir-birinə çox yaxındır. Bu sistemlərin içərisində ən maraqlısı GNU/Linux sistemidir.
GNU/Linux sisteminin quraşdırılması barədə e-sənədi bu linkdən əldə edə bilərsiniz.
Bu mətndə verilmiş bütün proqramlar GNU/Linux sistemi üçün nəzərdə tutulub, lakin eyni qayda ilə, digər Unix sistemlərində də yerinə yetirilə bilər.
Windows-a gəlincə, ola bilsin ki, Windows bir çox proqramçılar üçün çox qiymətli hesab olunur. Lakin bu sahədə azacıq da olsa, təcrübəsi olan bir proqramçı kimi biz bütün proqramçılara bu sistemdən mümkün qədər kənar olmağı məsləhət görürük, əgər siz gələcəkdə sistem proqramlaşdırmanı öyrənməkdə qərarlısınızsa.
Bu barədə Sonrakı istiqamətlər bölməsində əlavə məlumat əldə edə bilərsiniz.
İstənilən halda bu mətndə verilmiş proqramları Windows sistemində də icra etmək olar, bunun üçün MS Visual C++, Borland C++ Builder və Delphi kompilyatorlarından istifadə edə bilərsiniz.

Proqram yazmaq üçün bizə lazım olan digər vasitə Mətn redaktoru proqramıdır. Biz gedit proqramından istifadə edəcəyik. gedit proqramını yükləmək üçün Applications->Accessories->Text Editor seçimini edin.

Kompilyator proqramı
Kompilyator proqramı olaraq, gcc-dən istifadə edəcəyik və bu kompilyator bütün Unix sistemlərində ən çox istifadə olunan proqramdır və o, hər bir sistemin paketinə daxil olduğundan, instalyasiyaya ehtiyac yoxdur.

İlk test proqram - "Hello world" proqramı
Qeyd edək ki, ilk test proqramını yerinə yetirib lazımi nəticəni almaq həqiqətən əzmkarlıq tələb edir və bir qayda olaraq, həmişə bir neçə uğursuz cəhddən sonra alınır. İlk olaraq, işçi qovluq (kataloq, papka, folder, directory) anlayışına aydınlıq gətirək. Terminal proqramını yükləyin.
Applications->Accessories->Terminal
Terminal pəncərəsindən aşağıdakı əmri daxil edin.
pwd
Ekranda sizin işci qovluq cap olunacaq.


user@gnu_linux:~$ 
user@gnu_linux:~$ 
user@gnu_linux:~$ pwd
/home/user
user@gnu_linux:~$ 
user@gnu_linux:~$

ls əmrini daxil edin.


user@gnu_linux:~$ 
user@gnu_linux:~$ ls
3_20 ch02.pdf f1.txt music Public ubuntu_ins
3_20.cpp Desktop german music_file fhedd Videos
arch documents mozilla.pdf music_file~ ramdisk.img.gz vmlinuz26
a.txt dff		mozilla.ps pictures telix wget
boot Examples m.txt prg Templates
user@gnu_linux:~$ 
user@gnu_linux:~$

Bu əmr hal-hazırda bizim işci qovluqda olan faylları və qovluqları göstərir.
mkdir proqs əmrini daxil edirik.
Nəticədə bizim işci qovluqda yeni proqs qovluğu yaranacaq.
cd proqs əmrini daxil edirik.
Nəticədə bizim işci qovluq proqs olacaq. Bu qovluğu yeni yaratdıq və orada olan faylları yoxlamaq üçün yenidən ls əmrini daxil edirik.


user@gnu_linux:~$ 
user@gnu_linux:~$ mkdir progs
user@gnu_linux:~$ 
user@gnu_linux:~$ cd progs
user@gnu_linux:~/progs$ 
user@gnu_linux:~/progs$ ls
user@gnu_linux:~/progs$ 

progs qovluğunu yeni yaratdıq və hələlik onda heç bir fayl yoxdur.
gedit proqramını yükləyək. Applications->Accessories->Terminal
Aşağıdakı mətni gedit proqramına köçürüb hello.c adı ilə yeni yaratdığımız proqs qovluğunda yadda saxlayırıq.


#include <stdio.h>

int main(){

printf("Hello World\n");

}

ls əmrini daxil edək. Nəticə aşağıdakına bənzər olmalıdır.


user@gnu_linux:~/progs$ 
user@gnu_linux:~/progs$ ls
hello.c
user@gnu_linux:~/progs$ 
user@gnu_linux:~/progs$ 

Hal-hazırda proqs qovluğunda bizim yaratmaq istədiyimiz proqramın mətn fayli (çox vaxt buna mətn kodu deyirlər) var (hello.c). Bu koddan yerinə yetirilə bilən proqram almaq üçün (mətn kodun kompilyasiya etmək üçün) gcc hello.c -o hello əmrini daxil edək. Əgər siz proqramın mətn kodunu düzgün köçürmüsünüzsə, onda proqramın kompilyasiyası uğurla başa çatmalıdır. Bunu yoxlamaq üçün yenə ls əmrini daxil edirik. Bu dəfə proqs qovluğunda hello adlı yeni faylın yarandığını görürük. Bu, bizim proqramdır.


user@gnu_linux:~/progs$ 
user@gnu_linux:~/progs$ gcc hello.c -o hello
user@gnu_linux:~/progs$ 
user@gnu_linux:~/progs$ ls
hello hello.c
user@gnu_linux:~/progs$ 
user@gnu_linux:~/progs$ 

Yeni yaratdığımız hello proqramını yerinə yetirmək üçün ./hello əmrini daxil edirik. Əgər ekranda Hello World sətri çap olundusa, onda sizi təbrik edirik, siz artıq C dilində ilk proqramı yerinə yetirdiniz.


user@gnu_linux:prg# 
user@gnu_linux:prg# gcc hello.c -o hello
user@gnu_linux:prg# ./hello
Hello World
user@gnu_linux:prg# 
user@gnu_linux:prg# 

İndi isə, gəlin, proqramın mətn kodu ilə daha ətraflı tanış olaq. Bunun üçün əvvəl bu proqramın bir qədər dəyişik variantlarını yerinə yetirək.


//prog hello_1.c

#include <stdio.h>

int main(){ 

printf("Hello World_1\n"); 

}

Nümunə

Proqramın mətnini hello1.c adlı faylda yadda saxlayırıq və kompilyasiya edirik.
gcc hello1.c -o hello1 və yerinə yetiririk: ./hello1


user@gnu_linux:~prg# 
user@gnu_linux:~prg# gcc hello1.c -o hello1
user@gnu_linux:~prg# 
user@gnu_linux:~prg# 
user@gnu_linux:~prg# ./hello1
Hello World_1
user@gnu_linux:~prg#

Bu dəfə ekranda Hello World_1 sətrinin çap olunduğunu görərik. Yəqin ki, oxucuya aydın olur ki, bu proqram yerinə yetirildikdə, printf("....................."); sətrində "" arasında olan ifadə ekranda çap olunur, \n–dən savayı. hello1.c faylında həmin sətri printf("Salam dünya. Bu, mənim C dilində 3-cü proqramımdır\n"); sətri ilə əvəz edək. Proqramı kompilyasiya edib yerinə yetirsək, ekranda "Salam dünya. Bu, mənim C dilində 3-cü proqramımdır" sətri çap olunacaq.

Tapşırıq:
Ekranda müxtəlif yazılar çap edən proqramlar yazmalı.

Beləliklə, proqram haqda təcrübə topladıq, indi isə, gəlin, hello.c proqramını daha dərin analiz edək. Proqramın ilk sətri #include <stdio.h> sətridir. Bu sətrin dəqiq izahı 10-cu paraqrafda verilir. Hələlik isə, onunla kifayətlənək ki, bu sətir proqramda printf funksiyasından istifadə etməyə imkan verir. Növbəti sətir int main(){ sətridir. Burada main adlı funksiya təyin olunur. Funksiyalar barəsində daha ətraflı 5-ci paraqrafda söhbət açacağıq. Hələlik isə, onu qeyd edək ki, main funksiyası bütün C proqramlarında olmalıdır və C dilində yazılmış hər bir proqram yerinə yetirilməyə məhz bu yerdən başlayır. Növbəti sətir printf("Hello World\n"); sətridir. Bu sətir bizə tanışdır. Ekranda hər hansı sətri, rəqəmi və s. məlumatı çap etmək üçün istifadə olunur. printf çox güclü çap funksiyasıdır və konkret yerlərdə bu imkanlarla tanış olacağıq. İndi isə, təcrübə kimi printf("%d%s%d=%d\n",3,"+",5,3+5); sətrini proqrama əlavə edib, onu yerinə yetirək. Proqramın son sətri isə } sətridir. Bu işarə main funksiyasının bitdiyini bildirir. Printf funksiyasında tez-tez rast gəldiyimiz \n isə, yeni sətir simvolu adlanır. Yəni printf çap edəcəyi sətirdə \n–nə rast gəldikdə, yerdə qalan hissəni növbəti sətirdən çap edir. Aşağıdakı sətri proqrama əlavə edib, bunu yoxlayın.
printf("\n1\n2 novbəti sətir\n\n\n\n\n");