{"id":968,"date":"2021-02-14T11:54:00","date_gmt":"2021-02-14T10:54:00","guid":{"rendered":"https:\/\/trzykody.pl\/?page_id=968"},"modified":"2026-02-19T21:26:10","modified_gmt":"2026-02-19T20:26:10","slug":"c","status":"publish","type":"page","link":"https:\/\/trzykody.pl\/index.php\/c\/","title":{"rendered":"C"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Programowanie w j\u0119zykach niskiego poziomu wymaga rozumienia tego, jak komputer faktycznie wykonuje instrukcje, zarz\u0105dza pami\u0119ci\u0105 i reprezentuje dane. Jednym z najwa\u017cniejszych j\u0119zyk\u00f3w, kt\u00f3ry pozwala pracowa\u0107 bardzo blisko sprz\u0119tu, a jednocze\u015bnie zachowa\u0107 wzgl\u0119dn\u0105 przeno\u015bno\u015b\u0107 mi\u0119dzy systemami, jest j\u0119zyk programowania C. To j\u0119zyk programowania, proceduralny, kompilowany, o niewielkiej liczbie abstrakcji, daj\u0105cy pe\u0142n\u0105 kontrol\u0119 nad pami\u0119ci\u0105 i reprezentacj\u0105 danych.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis tre\u015bci<\/h2><nav><ol><li class=\"\"><a href=\"#c-jako-jezyk-niskiego-poziomu-z-kontrola-pamieci-i-minimalna-warstwa-abstrakcji\">J\u0119zyk programowania C &#8211; niski poziom z kontrol\u0105 pami\u0119ci i minimaln\u0105 warstw\u0105 abstrakcji<\/a><\/li><li class=\"\"><a href=\"#c-model-pamieci-wskazniki-i-arytmetyka-adresow-jako-fundament-zrozumienia-jezyka\">J\u0119zyk C \u2013 model pami\u0119ci, wska\u017aniki i arytmetyka adres\u00f3w jako fundament zrozumienia j\u0119zyka<\/a><ol><li class=\"\"><a href=\"#segmenty-pamieci-procesu\">Segmenty pami\u0119ci procesu<\/a><\/li><li class=\"\"><a href=\"#wskazniki\">Wska\u017aniki<\/a><\/li><li class=\"\"><a href=\"#bledy-typowe\">B\u0142\u0119dy typowe<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#c-w-kontekscie-kompilacji-standardu-jezyka-i-przenosnosci-kodu-miedzy-systemami\">Programowanie C w kontek\u015bcie kompilacji, standardu j\u0119zyka i przeno\u015bno\u015bci kodu mi\u0119dzy systemami<\/a><\/li><li class=\"\"><a href=\"#podstawowe-konstrukcje-jezykowe-i-kontrola-przeplywu-programu\">Podstawowe konstrukcje j\u0119zykowe i kontrola przep\u0142ywu programu<\/a><ol><li class=\"\"><a href=\"#typy-podstawowe\">Typy podstawowe<\/a><\/li><li class=\"\"><a href=\"#instrukcje-warunkowe\">Instrukcje warunkowe<\/a><\/li><li class=\"\"><a href=\"#petle\">P\u0119tle<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#struktury-danych-w-c-struktury-tablice-i-podstawy-abstrakcji\">Struktury danych w C: struktury, tablice i podstawy abstrakcji<\/a><ol><li class=\"\"><a href=\"#struktury\">Struktury<\/a><\/li><li class=\"\"><a href=\"#tablice\">Tablice<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#porownanie-z-c-i-python-roznice-w-modelu-wykonania-i-poziomie-abstrakcji\">Por\u00f3wnanie z C++ i Python \u2013 r\u00f3\u017cnice w modelu wykonania i poziomie abstrakcji<\/a><ol><li class=\"\"><a href=\"#c\">C++<\/a><\/li><li class=\"\"><a href=\"#python\">Python<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#pulapki-i-czeste-bledy-poczatkujacych\">Pu\u0142apki i cz\u0119ste b\u0142\u0119dy pocz\u0105tkuj\u0105cych<\/a><\/li><li class=\"\"><a href=\"#zastosowania-jezyka-w-systemach-operacyjnych-embedded-i-oprogramowaniu-niskopoziomowym\">Zastosowania j\u0119zyka w systemach operacyjnych, embedded i oprogramowaniu niskopoziomowym<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"c-jako-jezyk-niskiego-poziomu-z-kontrola-pamieci-i-minimalna-warstwa-abstrakcji\">J\u0119zyk programowania C &#8211; niski poziom z kontrol\u0105 pami\u0119ci i minimaln\u0105 warstw\u0105 abstrakcji<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>C<\/strong> powsta\u0142 na pocz\u0105tku lat 70. XX wieku w laboratoriach Bell. Autorem by\u0142 <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Dennis_Ritchie\" data-type=\"link\" data-id=\"https:\/\/pl.wikipedia.org\/wiki\/Dennis_Ritchie\" target=\"_blank\" rel=\"noopener\">Dennis Ritchie<\/a>. J\u0119zyk zosta\u0142 zaprojektowany do implementacji systemu operacyjnego <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Unix\" data-type=\"link\" data-id=\"https:\/\/pl.wikipedia.org\/wiki\/Unix\" target=\"_blank\" rel=\"noopener\">Unix<\/a>, co mocno wp\u0142yn\u0119\u0142o na jego charakter: prostota sk\u0142adni, bezpo\u015bredni dost\u0119p do pami\u0119ci, brak automatycznego zarz\u0105dzania zasobami.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C jest j\u0119zykiem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>kompilowanym (kod \u017ar\u00f3d\u0142owy \u2192 kod maszynowy),<\/li>\n\n\n\n<li>proceduralnym,<\/li>\n\n\n\n<li>statycznie typowanym,<\/li>\n\n\n\n<li>bez wbudowanego systemu klas czy wyj\u0105tk\u00f3w,<\/li>\n\n\n\n<li>z r\u0119cznym zarz\u0105dzaniem pami\u0119ci\u0105.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Brak \u201eochronnych\u201d mechanizm\u00f3w powoduje, \u017ce programista odpowiada za poprawno\u015b\u0107 niemal ka\u017cdego aspektu dzia\u0142ania programu: zakresy tablic, alokacj\u0119 pami\u0119ci, zwalnianie zasob\u00f3w, konwersje typ\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142adowy minimalny program:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n\nint main() {\n    printf(\"Hello, world!\\n\");\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017cdy element ma znaczenie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>#include &lt;stdio.h&gt;<\/code> \u2013 do\u0142\u0105czenie deklaracji funkcji wej\u015bcia\/wyj\u015bcia,<\/li>\n\n\n\n<li><code>int main()<\/code> \u2013 punkt wej\u015bcia programu,<\/li>\n\n\n\n<li><code>return 0;<\/code> \u2013 kod zako\u0144czenia procesu.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">W C nie ma ukrytych konstrukcji startowych. Kompilator generuje kod maszynowy, kt\u00f3ry po uruchomieniu przekazuje sterowanie funkcji <code>main<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"c-model-pamieci-wskazniki-i-arytmetyka-adresow-jako-fundament-zrozumienia-jezyka\">J\u0119zyk C \u2013 model pami\u0119ci, wska\u017aniki i arytmetyka adres\u00f3w jako fundament zrozumienia j\u0119zyka<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najwa\u017cniejszym elementem, kt\u00f3ry odr\u00f3\u017cnia C od j\u0119zyk\u00f3w wysokiego poziomu, jest jawna praca z pami\u0119ci\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"segmenty-pamieci-procesu\">Segmenty pami\u0119ci procesu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Typowy proces posiada:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>segment kodu (instrukcje),<\/li>\n\n\n\n<li>segment danych globalnych,<\/li>\n\n\n\n<li>stert\u0119 (heap),<\/li>\n\n\n\n<li>stos (stack).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Zmienne lokalne trafiaj\u0105 na stos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int main() {\n    int x = 5;\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>x<\/code> istnieje tylko w czasie dzia\u0142ania funkcji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pami\u0119\u0107 dynamiczna pochodzi ze sterty:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdlib.h&gt;\n\nint main() {\n    int *p = malloc(sizeof(int));\n    *p = 10;\n    free(p);\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tu programista musi sam wywo\u0142a\u0107 <code>free<\/code>. Brak zwolnienia pami\u0119ci oznacza wyciek.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wskazniki\">Wska\u017aniki<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wska\u017anik to zmienna przechowuj\u0105ca adres:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int a = 5;\nint *p = &amp;a;\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>&amp;a<\/code> \u2013 adres zmiennej,<\/li>\n\n\n\n<li><code>*p<\/code> \u2013 dereferencja (odczyt\/zapis warto\u015bci pod adresem).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Arytmetyka wska\u017anik\u00f3w:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int tab&#91;3] = {1, 2, 3};\nint *p = tab;\n\np++;   \/\/ przesuni\u0119cie o sizeof(int)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zwi\u0119kszenie wska\u017anika nie dodaje 1 bajtu, lecz rozmiar typu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"bledy-typowe\">B\u0142\u0119dy typowe<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>dereferencja niezainicjalizowanego wska\u017anika,<\/li>\n\n\n\n<li>podw\u00f3jne <code>free<\/code>,<\/li>\n\n\n\n<li>przekroczenie zakresu tablicy,<\/li>\n\n\n\n<li>u\u017cycie pami\u0119ci po zwolnieniu.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">C nie chroni przed tymi b\u0142\u0119dami.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"c-w-kontekscie-kompilacji-standardu-jezyka-i-przenosnosci-kodu-miedzy-systemami\">Programowanie C w kontek\u015bcie kompilacji, standardu j\u0119zyka i przeno\u015bno\u015bci kodu mi\u0119dzy systemami<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">C nie jest jednym, zamkni\u0119tym bytem. Istniej\u0105 standardy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C89 \/ C90<\/li>\n\n\n\n<li>C99<\/li>\n\n\n\n<li>C11<\/li>\n\n\n\n<li>C17<\/li>\n\n\n\n<li>C23<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3\u017cnice dotycz\u0105 m.in.:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>deklaracji zmiennych w dowolnym miejscu bloku (C99),<\/li>\n\n\n\n<li>typ\u00f3w o sta\u0142ej szeroko\u015bci (<code>stdint.h<\/code>),<\/li>\n\n\n\n<li>wsparcia wielow\u0105tkowo\u015bci (C11).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Proces kompilacji sk\u0142ada si\u0119 z etap\u00f3w:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Preprocesor \u2013 rozwija makra i dyrektywy <code>#include<\/code>.<\/li>\n\n\n\n<li>Kompilator \u2013 generuje kod po\u015bredni \/ asembler.<\/li>\n\n\n\n<li>Assembler \u2013 generuje kod maszynowy.<\/li>\n\n\n\n<li>Linker \u2013 \u0142\u0105czy modu\u0142y i biblioteki.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad kompilacji:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gcc program.c -o program\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Przeno\u015bno\u015b\u0107 kodu zale\u017cy od:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>u\u017cywania standardowych bibliotek,<\/li>\n\n\n\n<li>unikania rozszerze\u0144 kompilatora,<\/li>\n\n\n\n<li>kontrolowania rozmiar\u00f3w typ\u00f3w.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"podstawowe-konstrukcje-jezykowe-i-kontrola-przeplywu-programu\">Podstawowe konstrukcje j\u0119zykowe i kontrola przep\u0142ywu programu<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"typy-podstawowe\">Typy podstawowe<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>int<\/code><\/li>\n\n\n\n<li><code>char<\/code><\/li>\n\n\n\n<li><code>float<\/code><\/li>\n\n\n\n<li><code>double<\/code><\/li>\n\n\n\n<li><code>void<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Rozmiar typu zale\u017cy od architektury. Dla precyzyjnej kontroli stosuje si\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdint.h&gt;\n\nint32_t x;\nuint64_t y;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"instrukcje-warunkowe\">Instrukcje warunkowe<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>if (x &gt; 0) {\n    ...\n} else {\n    ...\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instrukcja <code>switch<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>switch (x) {\n    case 1:\n        break;\n    default:\n        break;\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"petle\">P\u0119tle<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>for (int i = 0; i &lt; 10; i++) {\n    ...\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>while (x &gt; 0) {\n    x--;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Brak kontroli zakres\u00f3w powoduje, \u017ce niesko\u0144czona p\u0119tla jest \u0142atwa do utworzenia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"struktury-danych-w-c-struktury-tablice-i-podstawy-abstrakcji\">Struktury danych w C: struktury, tablice i podstawy abstrakcji<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"struktury\">Struktury<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>struct Punkt {\n    int x;\n    int y;\n};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">U\u017cycie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct Punkt p;\np.x = 1;\np.y = 2;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wska\u017anik do struktury:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct Punkt *ptr = &amp;p;\nptr-&gt;x = 5;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Operator <code>-&gt;<\/code> dereferencjonuje wska\u017anik do struktury.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"tablice\">Tablice<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int tab&#91;5];\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tablica jest blokiem ci\u0105g\u0142ej pami\u0119ci. Nie przechowuje informacji o d\u0142ugo\u015bci. Funkcja przyjmuj\u0105ca tablic\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void f(int *t, int n) {\n    for (int i = 0; i &lt; n; i++) {\n        ...\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Rozmiar musi by\u0107 przekazany osobno.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"porownanie-z-c-i-python-roznice-w-modelu-wykonania-i-poziomie-abstrakcji\">Por\u00f3wnanie z C++ i Python \u2013 r\u00f3\u017cnice w modelu wykonania i poziomie abstrakcji<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"c\">C++<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">C++ rozszerza C o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>klasy,<\/li>\n\n\n\n<li>dziedziczenie,<\/li>\n\n\n\n<li>przeci\u0105\u017canie operator\u00f3w,<\/li>\n\n\n\n<li>RAII,<\/li>\n\n\n\n<li>standardow\u0105 bibliotek\u0119 kontener\u00f3w.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ten sam przyk\u0142ad dynamicznej alokacji:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n\nint main() {\n    int *p = new int(10);\n    delete p;\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">C++ oferuje te\u017c <code>std::vector<\/code>, kt\u00f3ry eliminuje r\u0119czne zarz\u0105dzanie pami\u0119ci\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python\">Python<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Python to j\u0119zyk interpretowany, z automatycznym garbage collection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>x = 5\ny = &#91;1, 2, 3]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Brak wska\u017anik\u00f3w, brak r\u0119cznego <code>free<\/code>, dynamiczne typowanie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W C programista zarz\u0105dza wszystkim jawnie. W Pythonie wi\u0119kszo\u015b\u0107 mechanizm\u00f3w jest ukryta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pulapki-i-czeste-bledy-poczatkujacych\">Pu\u0142apki i cz\u0119ste b\u0142\u0119dy pocz\u0105tkuj\u0105cych<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Niezainicjalizowane zmienne lokalne.<\/li>\n\n\n\n<li>Brak sprawdzania wyniku <code>malloc<\/code>.<\/li>\n\n\n\n<li>Przekroczenie zakresu tablicy.<\/li>\n\n\n\n<li>B\u0142\u0119dne rzutowania wska\u017anik\u00f3w.<\/li>\n\n\n\n<li>Za\u0142o\u017cenie, \u017ce <code>int<\/code> ma zawsze 32 bity.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Dodatkowo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>mieszanie pami\u0119ci stosu i sterty,<\/li>\n\n\n\n<li>zapominanie o <code>const<\/code>,<\/li>\n\n\n\n<li>brak prototyp\u00f3w funkcji.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zastosowania-jezyka-w-systemach-operacyjnych-embedded-i-oprogramowaniu-niskopoziomowym\">Zastosowania j\u0119zyka w systemach operacyjnych, embedded i oprogramowaniu niskopoziomowym<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">C jest u\u017cywany w:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>systemach operacyjnych,<\/li>\n\n\n\n<li>sterownikach urz\u0105dze\u0144,<\/li>\n\n\n\n<li>mikrokontrolerach,<\/li>\n\n\n\n<li>bibliotekach systemowych,<\/li>\n\n\n\n<li>silnikach baz danych,<\/li>\n\n\n\n<li>implementacjach kompilator\u00f3w.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Daje przewidywalno\u015b\u0107 czasow\u0105 i kontrol\u0119 nad zu\u017cyciem pami\u0119ci, co jest kluczowe w systemach wbudowanych.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Programowanie w C wymaga dok\u0142adno\u015bci i zrozumienia tego, jak dzia\u0142a maszyna. Nie oferuje ochrony przed b\u0142\u0119dami logicznymi ani pami\u0119ciowymi. W zamian daje pe\u0142n\u0105 kontrol\u0119 nad zasobami, przewidywalno\u015b\u0107 i mo\u017cliwo\u015b\u0107 budowania fundament\u00f3w dla innych j\u0119zyk\u00f3w i system\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programowanie w j\u0119zykach niskiego poziomu wymaga rozumienia tego, jak komputer faktycznie wykonuje instrukcje, zarz\u0105dza pami\u0119ci\u0105 i reprezentuje dane. Jednym z najwa\u017cniejszych j\u0119zyk\u00f3w, kt\u00f3ry pozwala pracowa\u0107 bardzo blisko sprz\u0119tu, a jednocze\u015bnie zachowa\u0107 wzgl\u0119dn\u0105 przeno\u015bno\u015b\u0107 mi\u0119dzy systemami, jest j\u0119zyk programowania C. To j\u0119zyk programowania, proceduralny, kompilowany, o niewielkiej liczbie abstrakcji, daj\u0105cy pe\u0142n\u0105 kontrol\u0119 nad pami\u0119ci\u0105 i reprezentacj\u0105 danych. J\u0119zyk programowania C &#8211; niski poziom z kontrol\u0105 pami\u0119ci i minimaln\u0105 warstw\u0105 abstrakcji C powsta\u0142 na pocz\u0105tku lat 70. XX wieku w laboratoriach Bell. Autorem by\u0142 Dennis Ritchie. J\u0119zyk zosta\u0142 zaprojektowany do implementacji systemu operacyjnego Unix, co mocno wp\u0142yn\u0119\u0142o na jego charakter: prostota sk\u0142adni, bezpo\u015bredni dost\u0119p do pami\u0119ci, brak automatycznego zarz\u0105dzania zasobami. C jest j\u0119zykiem: Brak \u201eochronnych\u201d mechanizm\u00f3w powoduje, \u017ce programista odpowiada za poprawno\u015b\u0107 niemal ka\u017cdego aspektu dzia\u0142ania programu: zakresy tablic, alokacj\u0119 pami\u0119ci, zwalnianie zasob\u00f3w, konwersje typ\u00f3w. Przyk\u0142adowy minimalny program: Ka\u017cdy element ma znaczenie: W C nie ma ukrytych konstrukcji startowych. Kompilator generuje kod maszynowy, kt\u00f3ry po uruchomieniu przekazuje sterowanie funkcji main. J\u0119zyk C \u2013 model pami\u0119ci, wska\u017aniki i arytmetyka adres\u00f3w jako fundament zrozumienia j\u0119zyka Najwa\u017cniejszym elementem, kt\u00f3ry odr\u00f3\u017cnia C od j\u0119zyk\u00f3w wysokiego poziomu, jest jawna praca z pami\u0119ci\u0105. Segmenty pami\u0119ci procesu Typowy proces posiada: Zmienne lokalne trafiaj\u0105 na stos: x istnieje tylko w czasie dzia\u0142ania funkcji. Pami\u0119\u0107 dynamiczna pochodzi ze sterty: Tu programista musi sam wywo\u0142a\u0107 free. Brak zwolnienia pami\u0119ci oznacza wyciek. Wska\u017aniki Wska\u017anik to zmienna przechowuj\u0105ca adres: Arytmetyka wska\u017anik\u00f3w: Zwi\u0119kszenie wska\u017anika nie dodaje 1 bajtu, lecz rozmiar typu. B\u0142\u0119dy typowe C nie chroni przed tymi b\u0142\u0119dami. Programowanie C w kontek\u015bcie kompilacji, standardu j\u0119zyka i przeno\u015bno\u015bci kodu mi\u0119dzy systemami C nie jest jednym, zamkni\u0119tym bytem. Istniej\u0105 standardy: R\u00f3\u017cnice dotycz\u0105 m.in.: Proces kompilacji sk\u0142ada si\u0119 z etap\u00f3w: Przyk\u0142ad kompilacji: Przeno\u015bno\u015b\u0107 kodu zale\u017cy od: Podstawowe konstrukcje j\u0119zykowe i kontrola przep\u0142ywu programu Typy podstawowe Rozmiar typu zale\u017cy od architektury. Dla precyzyjnej kontroli stosuje si\u0119: Instrukcje warunkowe Instrukcja switch: P\u0119tle Brak kontroli zakres\u00f3w powoduje, \u017ce niesko\u0144czona p\u0119tla jest \u0142atwa do utworzenia. Struktury danych w C: struktury, tablice i podstawy abstrakcji Struktury U\u017cycie: Wska\u017anik do struktury: Operator -&gt; dereferencjonuje wska\u017anik do struktury. Tablice Tablica jest blokiem ci\u0105g\u0142ej pami\u0119ci. Nie przechowuje informacji o d\u0142ugo\u015bci. Funkcja przyjmuj\u0105ca tablic\u0119: Rozmiar musi by\u0107 przekazany osobno. Por\u00f3wnanie z C++ i Python \u2013 r\u00f3\u017cnice w modelu wykonania i poziomie abstrakcji C++ C++ rozszerza C o: Ten sam przyk\u0142ad dynamicznej alokacji: C++ oferuje te\u017c std::vector, kt\u00f3ry eliminuje r\u0119czne zarz\u0105dzanie pami\u0119ci\u0105. Python Python to j\u0119zyk interpretowany, z automatycznym garbage collection. Przyk\u0142ad: Brak wska\u017anik\u00f3w, brak r\u0119cznego free, dynamiczne typowanie. W C programista zarz\u0105dza wszystkim jawnie. W Pythonie wi\u0119kszo\u015b\u0107 mechanizm\u00f3w jest ukryta. Pu\u0142apki i cz\u0119ste b\u0142\u0119dy pocz\u0105tkuj\u0105cych Dodatkowo: Zastosowania j\u0119zyka w systemach operacyjnych, embedded i oprogramowaniu niskopoziomowym C jest u\u017cywany w: Daje przewidywalno\u015b\u0107 czasow\u0105 i kontrol\u0119 nad zu\u017cyciem pami\u0119ci, co jest kluczowe w systemach wbudowanych. Programowanie w C wymaga dok\u0142adno\u015bci i zrozumienia tego, jak dzia\u0142a maszyna. Nie oferuje ochrony przed b\u0142\u0119dami logicznymi ani pami\u0119ciowymi. W zamian daje pe\u0142n\u0105 kontrol\u0119 nad zasobami, przewidywalno\u015b\u0107 i mo\u017cliwo\u015b\u0107 budowania fundament\u00f3w dla innych j\u0119zyk\u00f3w i system\u00f3w.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-968","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=968"}],"version-history":[{"count":3,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/968\/revisions"}],"predecessor-version":[{"id":983,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/968\/revisions\/983"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}