C (język programowania): Różnice pomiędzy wersjami

Z Encyklopedia Zarządzania
m (Infobox update)
 
m (cleanup bibliografii i rotten links)
 
(Nie pokazano 15 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
{{infobox4
'''C''' jest to strukturalny [[język wysokiego poziomu|język programowania wysokiego poziomu]] stworzony przez Dennisa Ritchiego oraz Briana Kernighana w latach 1969-1973. Język ten tworzony był z zamiarem wykorzystania go do tworzenia oprogramowania systemowego z czasem jednak stał się narzędziem szerszego zastosowania.
|list1=
<ul>
<li>[[SmallTalk (język programowania)]]</li>
<li>[[Visual Basic]]</li>
<li>[[Pascal (język programowania)]]</li>
<li>[[Perl (język programowania)]]</li>
<li>[[Python]]</li>
<li>[[BASIC]]</li>
<li>[[SQL]]</li>
<li>[[Ruby]]</li>
<li>[[JavaScript]]</li>
</ul>
}}


 
==TL;DR==
'''C''' jest to strukturalny [[język wysokiego poziomu|język programowania wysokiego poziomu]] stworzony przez Dennisa Ritchiego oraz Briana Kernighana w latach 1969-1973. Język ten tworzony był z zamiarem wykorzystania go do tworzenia oprogramowania systemowego z czasem jednak stał się narzędziem szerszego zastosowania.  
Język C to strukturalny język programowania stworzony w latach 1969-1973. Do jego programowania potrzebne są komputer z systemem operacyjnym, edytor tekstowy, kompilator, linker i debugger. Język C był wykorzystywany do pisania systemów operacyjnych i programów nadzorujących maszyny przemysłowe. Jest szybszy od języków interpretowanych, ale nie sprawdza się w obliczeniach matematycznych wysokiej precyzji. Przykładowy prosty program w języku C wyświetla napis "Witaj świecie". Język C ma składnię, typy danych, instrukcje sterujące i możliwość zarządzania pamięcią przez wskaźniki.


==Niezbędne narzędzia==
==Niezbędne narzędzia==
Linia 21: Linia 8:
* komputer z [[System_operacyjny|systemem operacyjnym]] np: Linux, Windows lub FreeBSD.
* komputer z [[System_operacyjny|systemem operacyjnym]] np: Linux, Windows lub FreeBSD.
* edytor tekstowy
* edytor tekstowy
* kompilator języka C odpowiada za tłumaczenie kodu źródłowego programu do kodu maszynowego (ciąg zer i jedynek)
* kompilator języka C - odpowiada za tłumaczenie kodu źródłowego programu do kodu maszynowego (ciąg zer i jedynek)
* linker [[program]] odpowiadający za łączenie skompilowanych plików źródłowych, które były dołączone do naszego programu za pomocą dyrektywy #include
* linker - [[program]] odpowiadający za łączenie skompilowanych plików źródłowych, które były dołączone do naszego programu za pomocą dyrektywy #include
* debugger (opcjonalnie) umożliwia on prześledzenie kodu linijka po linijce w celu zdiagnozowania błędów
* debugger - (opcjonalnie) umożliwia on prześledzenie kodu linijka po linijce w celu zdiagnozowania błędów


==Historia==
==Historia==
Język B (język interpretowany) był poprzednikiem i dał podstawy do stworzenia języka programowania ANSI C. Język B został stworzony przez Kena Thompsona i był używany w początkowych wersjach systemu operacyjnego UNIX. [[Firma]] Bell Labs rozwijała ten język nazywając go później NB (NewB), dalszy [[rozwój]] dał język C, który inaczej niż poprzednik jest językiem kompilowanym. Język C zyskał na znaczeniu, ponieważ dawał możliwość uruchamiania systemu UNIX na wielu maszynach, bez [[potrzeby]] pisania systemu od nowa.  
Język B (język interpretowany) był poprzednikiem i dał podstawy do stworzenia języka programowania ANSI C. Język B został stworzony przez Kena Thompsona i był używany w początkowych wersjach systemu operacyjnego UNIX. [[Firma]] Bell Labs rozwijała ten język nazywając go później NB (NewB), dalszy [[rozwój]] dał język C, który inaczej niż poprzednik jest językiem kompilowanym. Język C zyskał na znaczeniu, ponieważ dawał możliwość uruchamiania systemu UNIX na wielu maszynach, bez [[potrzeby]] pisania systemu od nowa.
<google>ban728t</google> Wystarczyło bowiem napisać kompilator dopasowany do danego urządzenia. Obecnie wykorzystywane popularne systemy operacyjne takie jak: Linux czy Microsoft Windows zostały napisane w języku ANSI C.  
 
Wystarczyło bowiem napisać kompilator dopasowany do danego urządzenia. Obecnie wykorzystywane popularne systemy operacyjne takie jak: Linux czy Microsoft Windows zostały napisane w języku ANSI C.
 
<google>n</google>


==Zastosowania==
==Zastosowania==
Język C dzięki swojej uniwersalności posłużył do [[cel]]ów ogólnych. Posłużył do pisania [[system]]ów operacyjnych, swą [[skuteczność]] potwierdził i sprawdził się również w przypadku programów nadzorujących maszyny przemysłowe. Język ten jest dużo szybszy od języków interpretowanych oraz tych uruchamianych w maszynach wirtualnych takich jak na przykład [[Java]]. Używa się go również do oprogramowania mikro-kontrolerów oraz systemów wbudowanych. Nie nadaje się jednak do wszystkiego na przykład słabo sprawdza się w obliczeniach matematycznych wysokiej precyzji. <ref> King K. N. (2011), ''Język C: nowoczesne [[programowanie]]'', Wydawnictwo Helion, Gliwice</ref>
Język C dzięki swojej uniwersalności posłużył do [[cel]]ów ogólnych. Posłużył do pisania [[system]]ów operacyjnych, swą [[skuteczność]] potwierdził i sprawdził się również w przypadku programów nadzorujących maszyny przemysłowe. Język ten jest dużo szybszy od języków interpretowanych oraz tych uruchamianych w maszynach wirtualnych takich jak na przykład [[Java]]. Używa się go również do oprogramowania mikro-kontrolerów oraz systemów wbudowanych. Nie nadaje się jednak do wszystkiego na przykład słabo sprawdza się w obliczeniach matematycznych wysokiej precyzji<ref> King K. N. (2011), ''Język C: nowoczesne [[programowanie]]'', Wydawnictwo Helion, Gliwice</ref>


==Przykładowy prosty program==
==Przykładowy prosty program==
<pre>
<pre>
# include <stdio.h>
# include <stdio.h>
int main (void)
int main (void)
{
{
  printf ("Witaj świecie!),
  printf ("Witaj świecie!"),
  return 0,
  return 0,
}
}
</pre>
</pre>


Zadaniem tego prostego programu jest wypisanie na ekranie napisu "Witaj świecie!.  
Zadaniem tego prostego programu jest wypisanie na ekranie napisu "Witaj świecie!".


'''Linia 1:''' Za pomocą dyrektywy '''#include''' załączamy standardową bibliotekę C do obsługi strumieni wejścia i wyjścia (ang. Standard Input/Output). Biblioteka ta zawiera definicję funkcji <code>printf</code> pozwalającej wyświetlić napis. Kolejną rzeczą, którą potrzebujemy zrobić to stworzyć główną funkcję main, która jest uruchamiana przy starcie programu. Poza nazwą <code>main</code> [[funkcja]] musi również posiadać określony typ danych, który zwraca oraz parametry, które przyjmuje podczas uruchomienia.  
'''Linia 1:''' Za pomocą dyrektywy '''#include''' załączamy standardową bibliotekę C do obsługi strumieni wejścia i wyjścia (ang. Standard Input/Output). Biblioteka ta zawiera definicję funkcji <code>printf</code> pozwalającej wyświetlić napis. Kolejną rzeczą, którą potrzebujemy zrobić to stworzyć główną funkcję main, która jest uruchamiana przy starcie programu. Poza nazwą <code>main</code> [[funkcja]] musi również posiadać określony typ danych, który zwraca oraz parametry, które przyjmuje podczas uruchomienia.


'''Linia 2:''' Zawiera deklarację funkcji <code>main</code>, która jest typu int (Integer - oznacza liczbę całkowitą). Napis <code>void</code> oznacza brak [[parametr]]ów przekazywanych podczas wywołania funkcji.
'''Linia 2:''' Zawiera deklarację funkcji <code>main</code>, która jest typu int (Integer - oznacza liczbę całkowitą). Napis <code>void</code> oznacza brak [[parametr]]ów przekazywanych podczas wywołania funkcji.
Linia 51: Linia 40:
'''Linia 3 oraz 6:''' klamry oznaczające początek i koniec bloku instrukcji należących do funkcji main.
'''Linia 3 oraz 6:''' klamry oznaczające początek i koniec bloku instrukcji należących do funkcji main.


'''Linia 4:''' Wywołanie funkcji <code>printf</code> przyjmującej jako parametr ciąg znaków "Witaj świecie!, który wyświetla na standardowym wyjściu. Każda [[instrukcja]] w języku C zakończona musi zostać średnikiem.
'''Linia 4:''' Wywołanie funkcji <code>printf</code> przyjmującej jako parametr ciąg znaków "Witaj świecie!", który wyświetla na standardowym wyjściu. Każda [[instrukcja]] w języku C zakończona musi zostać średnikiem.


'''Linia 5:''' Polecenie, w którym funkcja zwraca swój [[wynik]]. Przyjęło się, że liczba 0 oznacza zakończenie funkcji powodzeniem. Zamiast zera można również użyć <code>EXIT_SUCCESS</code> zdefiniowanego w pliku nagłówkowym stdlib.h.
'''Linia 5:''' Polecenie, w którym funkcja zwraca swój [[wynik]]. Przyjęło się, że liczba 0 oznacza zakończenie funkcji powodzeniem. Zamiast zera można również użyć <code>EXIT_SUCCESS</code> zdefiniowanego w pliku nagłówkowym stdlib.h.
==Składnia i typy danych==
==Składnia i typy danych==
Zmienne w języku C definiuje się w następujący sposób:
Zmienne w języku C definiuje się w następujący sposób:
Linia 63: Linia 53:
* pętle while, do..while, for
* pętle while, do..while, for
* instrukcja switch<ref> Banahan M., Brady D., Doran M. (1991), ''The C Book'' wydanie drugie, Wydawnictwo Addison-Wesley</ref>
* instrukcja switch<ref> Banahan M., Brady D., Doran M. (1991), ''The C Book'' wydanie drugie, Wydawnictwo Addison-Wesley</ref>
Można oczywiście tworzyć swoje własne funkcje. Poniżej przedstawiona jest funkcja, która zwraca podaną [[wartość]] przemnożoną razy dwa.  
Można oczywiście tworzyć swoje własne funkcje. Poniżej przedstawiona jest funkcja, która zwraca podaną [[wartość]] przemnożoną razy dwa.


  int mnozenie (int x){
  int mnozenie (int x){
Linia 74: Linia 64:
* odczytywanie lub zapisywanie elementów poza zasięgiem tablicy,
* odczytywanie lub zapisywanie elementów poza zasięgiem tablicy,
* nieodpowiednie używanie funkcji typu malloc () oraz free (), które pozwalają na dynamiczne alokowanie pamięci
* nieodpowiednie używanie funkcji typu malloc () oraz free (), które pozwalają na dynamiczne alokowanie pamięci
Powyższe działania mogą prowadzić do sytuacji, w której program nadpisze jakiś obszar w pamięci komputera, do której nie powinien mieć dostępu.<ref>Johnson S. C. (1979), ''UNIX Programmer’s Manual'', AT&T Bell Laboratories, Murray Hill</ref>
Powyższe działania mogą prowadzić do sytuacji, w której program nadpisze jakiś obszar w pamięci komputera, do której nie powinien mieć dostępu<ref>Johnson S. C. (1979), ''UNIX Programmer’s Manual'', AT&T Bell Laboratories, Murray Hill</ref>
 
{{infobox5|list1={{i5link|a=[[SmallTalk (język programowania)]]}} &mdash; {{i5link|a=[[Visual Basic]]}} &mdash; {{i5link|a=[[Pascal (język programowania)]]}} &mdash; {{i5link|a=[[Perl (język programowania)]]}} &mdash; {{i5link|a=[[Python]]}} &mdash; {{i5link|a=[[BASIC]]}} &mdash; {{i5link|a=[[SQL]]}} &mdash; {{i5link|a=[[Ruby]]}} &mdash; {{i5link|a=[[JavaScript]]}} &mdash; {{i5link|a=[[Inwestycja początkowa]]}} }}


==Przypisy==
==Przypisy==
Linia 80: Linia 72:


==Bibliografia==
==Bibliografia==
* Hinek J. (2013), [http://people.scs.carleton.ca/~mjhinek/W13/COMP2401/notes/Arrays_and_Pointers.pdf ''Arrays and Pointers''], Carleton University, Ottawa
<noautolinks>
* Kernighan B., Ritchie D. (2010),''Język ANSI C. Programowanie. Wydanie II'', Wydawnictwo Helion, Gliwice, ISBN: 978-83-246-2578-9, s. 17-23
* Hinek J. (2013), ''[https://people.scs.carleton.ca/~mjhinek/W13/COMP2401/notes/Arrays_and_Pointers.pdf Arrays and Pointers]'', Carleton University, Ottawa
* King K. N. (2011), ''Język C: nowoczesne programowanie'', Wydawnictwo Helion, Gliwice, ISBN: 978-83-246-2805-6
* Kernighan B., Ritchie D. (2010), ''Język ANSI C, Programowanie'', Wydawnictwo Helion, Gliwice
* Prata S. (2006), ''Język C. Szkoła programowania. Wydanie V'', Wydawnictwo Helion, Gliwice, ISBN: 83-246-0291-7, s. 23-29
* King K. (2011), ''Język C: nowoczesne programowanie'', Wydawnictwo Helion, Gliwice
* Reek K. A. (1997), ''Pointers on C'', Wydawnictwo Pearson, Londyn, ISBN: 0673999866
* Prata S. (2006), ''Język C++. Szkoła programowania'', Helion, Gliwice
* Thompson K., [http://doc.cat-v.org/bell_labs/new_c_compilers/new_c_compiler.pdf ''A New C Compiler''], AT&T Bell Laboratories, Murray Hill, New Jersey
* Reek K. (1997), ''Pointers on C'', Pearson, Londyn
* Wikibooks, [https://pl.wikibooks.org/wiki/C ''Programowanie w C''], Wersja 2.0 z dnia 14 listopada 2010, s. 13-24
* Strona internetowa: ''[https://pl.wikibooks.org/wiki/C Programowanie w C]'', Wikibooks
 
* Thompson K. (2000), ''[https://doc.cat-v.org/bell_labs/new_c_compilers/new_c_compiler.pdf A New C Compiler]'', AT&T Bell Laboratories, Murray Hill, New Jersey
</noautolinks>
[[Kategoria:Języki_programowania]]
[[Kategoria:Języki_programowania]]


{{a|Jarosław Zembal, Arkadiusz Bugajski}}
{{a|Jarosław Zembal, Arkadiusz Bugajski}}
{{#metamaster:description|C - strukturalny język programowania stworzony przez Ritchiego i Kernighana. Wykorzystywany do tworzenia oprogramowania systemowego i innych dziedzin.}}

Aktualna wersja na dzień 22:57, 9 sty 2024

C jest to strukturalny język programowania wysokiego poziomu stworzony przez Dennisa Ritchiego oraz Briana Kernighana w latach 1969-1973. Język ten tworzony był z zamiarem wykorzystania go do tworzenia oprogramowania systemowego z czasem jednak stał się narzędziem szerszego zastosowania.

TL;DR

Język C to strukturalny język programowania stworzony w latach 1969-1973. Do jego programowania potrzebne są komputer z systemem operacyjnym, edytor tekstowy, kompilator, linker i debugger. Język C był wykorzystywany do pisania systemów operacyjnych i programów nadzorujących maszyny przemysłowe. Jest szybszy od języków interpretowanych, ale nie sprawdza się w obliczeniach matematycznych wysokiej precyzji. Przykładowy prosty program w języku C wyświetla napis "Witaj świecie". Język C ma składnię, typy danych, instrukcje sterujące i możliwość zarządzania pamięcią przez wskaźniki.

Niezbędne narzędzia

Aby móc programować w języku C potrzebne są do tego:

  • komputer z systemem operacyjnym np: Linux, Windows lub FreeBSD.
  • edytor tekstowy
  • kompilator języka C - odpowiada za tłumaczenie kodu źródłowego programu do kodu maszynowego (ciąg zer i jedynek)
  • linker - program odpowiadający za łączenie skompilowanych plików źródłowych, które były dołączone do naszego programu za pomocą dyrektywy #include
  • debugger - (opcjonalnie) umożliwia on prześledzenie kodu linijka po linijce w celu zdiagnozowania błędów

Historia

Język B (język interpretowany) był poprzednikiem i dał podstawy do stworzenia języka programowania ANSI C. Język B został stworzony przez Kena Thompsona i był używany w początkowych wersjach systemu operacyjnego UNIX. Firma Bell Labs rozwijała ten język nazywając go później NB (NewB), dalszy rozwój dał język C, który inaczej niż poprzednik jest językiem kompilowanym. Język C zyskał na znaczeniu, ponieważ dawał możliwość uruchamiania systemu UNIX na wielu maszynach, bez potrzeby pisania systemu od nowa.

Wystarczyło bowiem napisać kompilator dopasowany do danego urządzenia. Obecnie wykorzystywane popularne systemy operacyjne takie jak: Linux czy Microsoft Windows zostały napisane w języku ANSI C.

Zastosowania

Język C dzięki swojej uniwersalności posłużył do celów ogólnych. Posłużył do pisania systemów operacyjnych, swą skuteczność potwierdził i sprawdził się również w przypadku programów nadzorujących maszyny przemysłowe. Język ten jest dużo szybszy od języków interpretowanych oraz tych uruchamianych w maszynach wirtualnych takich jak na przykład Java. Używa się go również do oprogramowania mikro-kontrolerów oraz systemów wbudowanych. Nie nadaje się jednak do wszystkiego na przykład słabo sprawdza się w obliczeniach matematycznych wysokiej precyzji[1]

Przykładowy prosty program

# include <stdio.h>
int main (void)
{
 printf ("Witaj świecie!"),
 return 0,
}

Zadaniem tego prostego programu jest wypisanie na ekranie napisu "Witaj świecie!".

Linia 1: Za pomocą dyrektywy #include załączamy standardową bibliotekę C do obsługi strumieni wejścia i wyjścia (ang. Standard Input/Output). Biblioteka ta zawiera definicję funkcji printf pozwalającej wyświetlić napis. Kolejną rzeczą, którą potrzebujemy zrobić to stworzyć główną funkcję main, która jest uruchamiana przy starcie programu. Poza nazwą main funkcja musi również posiadać określony typ danych, który zwraca oraz parametry, które przyjmuje podczas uruchomienia.

Linia 2: Zawiera deklarację funkcji main, która jest typu int (Integer - oznacza liczbę całkowitą). Napis void oznacza brak parametrów przekazywanych podczas wywołania funkcji.

Linia 3 oraz 6: klamry oznaczające początek i koniec bloku instrukcji należących do funkcji main.

Linia 4: Wywołanie funkcji printf przyjmującej jako parametr ciąg znaków "Witaj świecie!", który wyświetla na standardowym wyjściu. Każda instrukcja w języku C zakończona musi zostać średnikiem.

Linia 5: Polecenie, w którym funkcja zwraca swój wynik. Przyjęło się, że liczba 0 oznacza zakończenie funkcji powodzeniem. Zamiast zera można również użyć EXIT_SUCCESS zdefiniowanego w pliku nagłówkowym stdlib.h.

Składnia i typy danych

Zmienne w języku C definiuje się w następujący sposób:

int x = 5,

Dostępnych jest wiele typów zmiennych, takich jak int dla liczb całkowitych, float dla liczb zmiennoprzecinkowych, enum - typ wyliczeniowy, char przeznaczony do przechowywania pojedynczych znaków. Poza wbudowanymi typami można rozróżnić pochodne typy, na przykład tablice, wskaźniki, unie (union) czy struktury (struct). Komentarze liniowe rozpoczynają się po //, natomiast komentarze blokowe umieszcza się pomiędzy /* oraz */ Ponieważ język C jest strukturalny, programiści mogą używać następujących instrukcji sterujących:

  • if, else
  • pętle while, do..while, for
  • instrukcja switch[2]

Można oczywiście tworzyć swoje własne funkcje. Poniżej przedstawiona jest funkcja, która zwraca podaną wartość przemnożoną razy dwa.

int mnozenie (int x){
return 2*x,
}

Zarządzanie pamięcią

Język C pozwala programiście na dostęp do dowolnego obszaru pamięci poprzez wskaźniki. Jest to duże zagrożenie, przez które szczególnie niedoświadczeni programiści popełniają wiele błędów i powodują błędne działanie programu. Najczęstsze błędy to:

  • niezainicjalizowanie wskaźnika,
  • odczytywanie lub zapisywanie elementów poza zasięgiem tablicy,
  • nieodpowiednie używanie funkcji typu malloc () oraz free (), które pozwalają na dynamiczne alokowanie pamięci

Powyższe działania mogą prowadzić do sytuacji, w której program nadpisze jakiś obszar w pamięci komputera, do której nie powinien mieć dostępu[3]


C (język programowania)artykuły polecane
SmallTalk (język programowania)Visual BasicPascal (język programowania)Perl (język programowania)PythonBASICSQLRubyJavaScriptInwestycja początkowa

Przypisy

  1. King K. N. (2011), Język C: nowoczesne programowanie, Wydawnictwo Helion, Gliwice
  2. Banahan M., Brady D., Doran M. (1991), The C Book wydanie drugie, Wydawnictwo Addison-Wesley
  3. Johnson S. C. (1979), UNIX Programmer’s Manual, AT&T Bell Laboratories, Murray Hill

Bibliografia

  • Hinek J. (2013), Arrays and Pointers, Carleton University, Ottawa
  • Kernighan B., Ritchie D. (2010), Język ANSI C, Programowanie, Wydawnictwo Helion, Gliwice
  • King K. (2011), Język C: nowoczesne programowanie, Wydawnictwo Helion, Gliwice
  • Prata S. (2006), Język C++. Szkoła programowania, Helion, Gliwice
  • Reek K. (1997), Pointers on C, Pearson, Londyn
  • Strona internetowa: Programowanie w C, Wikibooks
  • Thompson K. (2000), A New C Compiler, AT&T Bell Laboratories, Murray Hill, New Jersey


Autor: Jarosław Zembal, Arkadiusz Bugajski