Privacy Policy Cookie Policy Terms and Conditions C (język programowania) - Wikipedia, wolna encyklopedia

C (język programowania)

Z Wikipedii

C jest językiem programowania stworzonym na początku lat siedemdziesiątych przez Dennisa Ritchie'ego do programowania systemów operacyjnych i innych zadań niskiego poziomu.

Spis treści

[edytuj] Historia

Poprzednikiem języka C był interpretowany język B, który Ritchie rozwinął w język C. Pierwszy okres rozwoju języka to lata 1969-1973. W roku 1973 w języku C udało się zaimplementować jądro (kernel) systemu operacyjnego Unix. W 1978 roku Brian Kernighan i Dennis Ritchie opublikowali dokumentację języka p.t. C Programming Language (wydanie polskie: Język ANSI C).

C stał się popularny poza Laboratoriami Bella (gdzie powstał) po 1980 roku, i stał się dominującym językiem do programowania systemów operacyjnych i aplikacji. Na bazie języka C w latach osiemdziesiątych Bjarne Stroustrup stworzył język C++, który wprowadza możliwość programowania obiektowego.

[edytuj] Standardy

Standard języka C został zapisany w normie ISO 9899. Pierwsze wydanie tego dokumentu miało miejsce w 1990 roku (ISO 9899:1990) i było modyfikacją standardu ANSI: ANSI X3.159-1989 "Programming Language C". Język zgodny z tą wersją standardu określany jest nieformalnie jako C89. Od tego czasu powstało wiele uaktualnień tej normy. Ostatnia ma oznaczenie ISO 9899:1999 i została opublikowana w 1999 roku, język zgodny z tą normą określany jest nieformalnie jako C99. C99 nie jest kompatybilny z C++.

[edytuj] Podstawowe elementy języka C

[edytuj] Komentarze

Komentarz blokowy umieszcza się między sekwencją znaków "/*" a "*/", a komentarz liniowy rozpoczyna się sekwencją "//" a kończy znakiem końca linii. Komentarz liniowy wprowadzono do obecnego standardu języka C (ISO 9899:1999) z języka C++.

/* To jest komentarz
 * blokowy. Zajmuje on
 * kilka linii */

// to jest komentarz liniowy

[edytuj] Podstawowe typy

Typ Typowe wielkość pamięci Uwagi
_Bool 1 bajt tylko w nowych wersjach
char 1 bajt
unsigned char 1 bajt
signed char 1 bajt
int 2 lub 4 bajty
unsigned int 2 lub 4 bajty
short int 2 bajty
unsigned short int 2 bajty
long int 4 bajty
unsigned long int 4 bajty
long long int 8 bajtów tylko w nowych wersjach
unsigned long long int 8 bajtów tylko w nowych wersjach
float 4 bajty
double 8 bajtów
long double 8, 10 lub 12 bajtów
float _Complex 8 bajtów tylko w nowych wersjach
double _Complex 16 bajtów tylko w nowych wersjach
long double _Complex 24 bajty tylko w nowych wersjach
float _Imaginary tylko w nowych wersjach
double _Imaginary tylko w nowych wersjach
long double _Imaginary tylko w nowych wersjach
void

Zmienne deklaruje się za pomocą prostej konstrukcji:

typ nazwa;

Należy pamiętać, że podane powyżej rozmiary zmiennych są jedynie orientacyjne i mogą się różnić w zależności od środowiska (np. jeśli w systemie zdefiniujemy znaki 16-bitowe to zmiene typu char zajmują po 16 bitów; w systemach 64-bitowych zmienna long posiada zazwyczaj 64-bity).
Inną ważną sprawą jest szerokość bajtu. Nic nie stoi na przeszkodzie, aby bajt miał np. 7 bitów.
Wielu programistów nie zdaje sobie sprawy z powyższych problemów, co może być (i jest) przyczyną wielu błędów oprogramowania a w rezultacie powstają różne luki w bezpieczeństwie oprogramowania.

[edytuj] Typy pochodne

enum nazwa { jeden, dwa };
struct nazwa {
    typ1 nazwa1;
    typ2 nazwa2;
};
  • Unie
union nazwa {
    typ1 nazwa1;
    typ2 nazwa2;
};
  • Pola bitowe
typ [identyfikator] : długość;
typ nazwa[liczba];
typ *nazwa;
typ **nazwa;
typ_zwracany (*nazwa_wsk_do_funkcji)(typ nazwa_parametru1,typ nazwa_parametru2,...);

[edytuj] Instrukcje sterujące

[edytuj] Instrukcja if

Instrukcja if (ang. jeśli) to podstawowa instrukcja warunkowa w C - gdy warunek1 jest spełniony (zwraca wartość niezerową), wykonany zostanie kod zawarty w bloku ograniczonym klamrami. Instrukcje else if i else są opcjonalne, sprawdzane są wyłącznie gdy podstawowy warunek nie jest spełniony.

if (warunek1) {
    instrukcje;
}
else if(warunek2){
    instrukcje;
}
else {
    instrukcje;
}

[edytuj] Pętla while

Pętla while (ang. dopóki) - instrukcja wykonuje kod zawarty w bloku ograniczonym klamrami tak długo, dopóki jej warunek jest spełniony. Instrukcja sprawdza warunek przed wykonaniem ciała pętli. Pętla while może wykonywać się nieskończoną ilość razy, gdy wyrażenie nigdy nie przyjmie wartości 0, może także nie wykonać się nigdy, gdy wartość przed pierwszym przebiegiem będzie zerowa.

while (wyrażenie) {
 instrukcje;
}

Przykład

int x = 10;
while (x > 0)
{
  printf(".");
  --x;
};

Pętla będzie się wykonywać tak długo, jak zmienna x będzie dodatnia - wykona się więc 10 razy, drukując kropkę na standardowe wyjście.

[edytuj] Pętla do...while

Pętla do...while (ang. wykonaj...dopóki) jest podobna do pętli while z tą różnicą, że warunek sprawdzany jest po każdym wykonaniu pętli, a więc pętla zawsze wykona się co najmniej raz.

do {
instrukcje;
}
while(warunek);

Przykład

int x = 0;
do
{
  printf(".");
}
while(x > 0);

Pętla wykona się raz, drukując kropkę na standardowe wyjście. Następnie sprawdzony będzie warunek pętli. W podanym przykładzie nie będzie spełniony, pętla zakończy więc działanie po jednym obiegu.

[edytuj] Pętla for

Diagram pętli for
Powiększ
Diagram pętli for

Pętla for (ang. dla) jest rozwinięciem pętli while o instrukcję wykonywaną przed pierwszym obiegiem oraz dodatkową instrukcję wykonywaną po każdym przebiegu - najczęściej służącą jako licznik obiegów. Często zmienną liczącą kolejne wykonania ciała pętli nazywa się iteratorem.

for (wyrażenie1; wyrażenie2; wyrażenie3) {
  instrukcje;
}

Przed pierwszym sprawdzeniem warunku pętli wykonane zostanie wyrażenie1 (na diagramie oznaczone przez literkę A), następnie sprawdzony zostanie warunek umieszczony w wyrażeniu2 (literka B). Dopóki warunek będzie miał niezerową wartość logiczną, wykonywane będzie ciało pętli ograniczone klamrami, oraz - po każdym obiegu - wyrażenie3. Jeśli wyrażenie2 na początku jest fałszywe, ciało pętli nie wykona się wcale. Każde z wyrażeń można opuścić - zamiast nich domyślnie występować będzie wartość niezerowa. Ominięcie wszystkich wyrażeń doprowadzi więc do powstania nieskończonej pętli.

Przykład

int x;
for (x = 10; x > 0; x--)
{
  printf(".");
}

Powyższa pętla jest równoważna przykładowi podanemu przy pętli while. Przed sprawdzeniem warunku zmienna x zainicjalizowana zostanie wartością 10. Następnie sprawdzony będzie warunek, który w tym przypadku zwróci wartość niezerową. Wykonane zostanie ciało pętli - na standardowe wyjście wydrukowana zostanie kropka. Następnie wykonana zostanie trzecia instrukcja - dekrementacja wartości x. Pętla wykona się dziesięciokrotnie, a zmienna x, służąca w tej pętli za iterator, po jej zakończeniu będzie miała wartość 0.

[edytuj] Instrukcja switch

Instrukcją switch (ang. przełącznik) zastąpić można wielokrotne wywoływanie instrukcji warunkowej if np. dla różnych wartości tej samej zmiennej - przykładowo, gdy zmienna może przyjąć 10 różnych wartości, a dla każdej z nich należy podjąć inne działanie.

switch (wyrażenie) {
     case wartość1 :
        instrukcje;
        [break;]
     case wartość2 :
        instrukcje;
        [break;]
     default :
        instrukcje;
        [break;]
}

Wyrażenie najczęściej jest zmienną o określonej wartości. Jeśli tą wartością jest wartość1, wykonywane są instrukcje następujące po odpowiedniej etykiecie case aż do następnej instrukcji przerywającej, z reguły break (instrukcja ta nie musi występować na zakończenie każdego bloku rozpoczętego przez case - wykonany zostanie wtedy kod następnych przypadków). Przypadek default jest opcjonalny, określa instrukcje wykonywane, gdy wartość zmiennej nie jest równa żadnemu z wyszczególnionych przypadków.

Przykład

int x;
scanf("%d", &x);
switch(x)
{
  case 1:
    printf("jeden");
    break;
  case 2:
    printf("dwa");
    break;
  default:
    printf("coś innego");
    break;
}

Powyższa instrukcja switch wczyta liczbę ze standardowego wejścia i wyświetli "jeden", jeśli podana liczba to 1, "dwa" jeśli podano 2 oraz "coś innego", jeśli podano jakąkolwiek inną wartość liczbową. W przypadku, gdyby program nie zawierał instrukcji break, podanie wartości 1 spowodowałoby wyświetlenie zarówno "jeden", jak i "dwa" oraz "coś innego".

[edytuj] Funkcje

Funkcje w C tworzy się za pomocą następującej składni:

[klasa_pamieci] [typ] nazwa([lista_argumentów])
{
  instrukcje;
  [return wartość;]
}

Klasa pamięci, określenie zwracanego typu oraz lista argumentów są opcjonalne. Jeżeli nie podano typu, domyślnie jest to typ pusty void, a instrukcję return kończącą funkcję i zwracającą wartość do funkcji nadrzędnej można pominąć. Listę argumentów tworzą wszystkie zmienne (zarówno przekazywane przez wartość jak i wskaźniki) wraz z określeniem ich typu. Dozwolona jest rekurencja, nie ma natomiast możliwości przeciążania funkcji (wprowadzonego m.in. w C++).

Przykład

int kwadrat(int x)
{
  return x*x;
}

Ta prosta funkcja zwraca podaną do niej liczbę podniesioną do kwadratu. Typ przekazanej do niej zmiennej oraz typ zwracany określony jest jako int. Definicja funkcji umieszczona musi być w głównej przestrzeni (poza wszelkimi innymi funkcjami), a wywoływać ją można z każdego miejsca w programie. Przykładowo, aby zmiennej n przypisać wartość kwadratu z 16, wywołać należy: int n = kwadrat(16);.

[edytuj] Przykłady

Hello, world

#include <stdio.h>

int main(void)
{
    printf ("Hello, world!\n");
    return 0;
}

W powyższym kodzie:

  • Dyrektywa #include włącza do pliku zawartość odpowiednich plików nagłówkowych - w tym przypadku pliku stdio.h, zawierającego m.in. prototyp funkcji printf.
  • Główna funkcja nazywa się zawsze main. Zwraca ona wartość typu całkowitoliczbowego - int, w tym przypadku 0.
  • Za wyprowadzenie wyniku na standardowe wyjście (zwykle na ekran) odpowiedzialna jest funkcja printf.
  • Łańcuch tekstowy zamyka się w cudzysłowach: "łańcuch".
  • Znak nowej linii zapisuje się jako "\n".

[edytuj] Ciekawostki

Corocznie organizowany jest konkurs IOCCC (International Obfuscated C Code Contest) prezentujący najbardziej "zaciemnione" (trudne do odczytania) programy w języku C.

Na podstawie: The Development of the C Language

[edytuj] Zobacz też

Wikibooks
Zobacz podręcznik na Wikibooks: C (język programowania)

[edytuj] Literatura

[edytuj] Linki zewnętrzne

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu