Przejdź do zawartości

C/O języku C: Różnice pomiędzy wersjami

Z Wikibooks, biblioteki wolnych podręczników.
< C
Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
m lit.
Nie podano opisu zmian
 
(Nie pokazano 47 wersji utworzonych przez 17 użytkowników)
Linia 1: Linia 1:
<noinclude><small>< [[Programowanie:C]]</small></noinclude>

{{wikipedia|C (język programowania)}}
{{wikipedia|C (język programowania)}}
'''C''' jest językiem programowania wysokiego poziomu. Jego nazwę interpretuje się jako następną literę po B (nazwa jego poprzednika), lub drugą literę języka BCPL (poprzednik języka B).
'''C''' jest językiem programowania wysokiego poziomu. Jego nazwę interpretuje się jako następną literę po B (nazwa jego poprzednika), lub drugą literę języka BCPL (poprzednik języka B).


==Historia C==


==Cechy==
* proceduralny<ref>[https://www.quora.com/Is-C-a-non-procedure-language-or-not quora: Is-C-a-non-procedure-language-or-not]</ref>
* imperatywny
* ogólnego przeznaczenia
* wystandaryzowany

==Historia C==
[[Plik:Ken Thompson and Dennis Ritchie--1973.jpg|mały|prawo|Dennis Ritchie (right), the inventor of the C programming language, with Ken Thompson]]
W 1947 roku trzej naukowcy z Bell Telephone Laboratories - William Shockley, Walter Brattain i John Bardeen - stworzyli pierwszy tranzystor; w 1956 roku, w MIT skonstruowano pierwszy komputer oparty wyłącznie na tranzystorach: TX-O; w 1958 roku Jack Kilby z Texas Instruments skonstruował układ scalony. Ale zanim powstał pierwszy układ scalony, pierwszy język wysokiego poziomu został już napisany.
W 1947 roku trzej naukowcy z Bell Telephone Laboratories - William Shockley, Walter Brattain i John Bardeen - stworzyli pierwszy tranzystor; w 1956 roku, w MIT skonstruowano pierwszy komputer oparty wyłącznie na tranzystorach: TX-O; w 1958 roku Jack Kilby z Texas Instruments skonstruował układ scalony. Ale zanim powstał pierwszy układ scalony, pierwszy język wysokiego poziomu został już napisany.


W 1954 powstał [[w:Fortran|Fortran]] <!--<!--([[Programming:Fortran|Fortran]])-->--> (Formula Translator), który zapoczątkował napisanie języka Fortran I (1956). Później powstały kolejno:
W 1954 powstał [[Fortran]] (Formula Translator), który zapoczątkował napisanie języka Fortran I (1956). Później powstały kolejno:
*[[w:Algol|Algol]] <!--<!--([[Programming:Algol|Algol]])-->--> 58 - Algorithmic Language w 1958 r.
*[[w:Algol (język programowania)|Algol]] 58 - Algorithmic Language w 1958 r.
*Algol 60 (1960)
*Algol 60 (1960)
*[[w:CPL|CPL]]<!-- <!--([[Programming:CPL|CPL]])-->--> - Combined Programming Language (1963)
*[[w:CPL|CPL]] - Combined Programming Language (1963)
*[[w:BCPL|BCPL]]<!-- <!--([[Programming:BCPL|BCPL]])-->--> - Basic CPL (1967)
*[[w:BCPL|BCPL]] - Basic CPL (1967)
*[[w:B|B]]<!-- <!--([[Programming:B|B]])-->--> (1969)
*[[w:B (język programowania)|B]] (1969)
i C w oparciu o B.
i C w oparciu o B.


B został stworzony przez Kena Thompsona z Bell Labs; był to [[w:Język interpretowany|język interpretowany]], używany we wczesnych, wewnętrznych wersjach systemu operacyjnego [[w:UNIX|UNIX]]. Inni pracownicy Bell Labs, Thompson i Dennis Richie, rozwinęli B, nazywając go NB; dalszy rozwój NB dał C - [[w:Język kompilowany|język kompilowany]]. Większa część UNIXa została ponownie napisana w NB, a następnie w C, co dało w efekcie bardziej przenośny system operacyjny. W 1978 roku wydana została książka pt. "The C Programming Language", która stała się pierwszym podręcznikiem do nauki języka C.
B został stworzony przez Kena Thompsona z Bell Labs; był to [[w:Język interpretowany|język interpretowany]], używany we wczesnych, wewnętrznych wersjach systemu operacyjnego [[w:UNIX|UNIX]]. Inni pracownicy Bell Labs, Thompson i Dennis Ritchie, rozwinęli B, nazywając go NB; dalszy rozwój NB dał C - [[w:Język kompilowany|język kompilowany]]. Większa część UNIX-a została ponownie napisana w NB, a następnie w C, co dało w efekcie bardziej przenośny system operacyjny. W 1978 roku wydana została książka pt. "The C Programming Language", która stała się pierwszym podręcznikiem do nauki języka C.


Możliwość uruchamiania UNIX-a na różnych komputerach była główną przyczyną początkowej popularności zarówno UNIX-a, jak i C; zamiast tworzyć nowy system operacyjny, programiści mogli po prostu napisać tylko te części systemu, których wymagał inny sprzęt, oraz napisać kompilator C dla nowego systemu. Odkąd większa część narzędzi systemowych była napisana w C, logiczne było pisanie kolejnych w tym samym języku.
Możliwość uruchamiania UNIX-a na różnych komputerach była główną przyczyną początkowej popularności zarówno UNIX-a, jak i C; zamiast tworzyć nowy system operacyjny, programiści mogli po prostu napisać tylko te części systemu, których wymagał inny sprzęt, oraz napisać kompilator C dla nowego systemu. Odkąd większa część narzędzi systemowych była napisana w C, logiczne było pisanie kolejnych w tym samym języku.


Również jeden ze współczesnych systemów operacyjnych - [[w:Linux|Linux]] - został napisany w C.
Kilka z obecnie powszechnie stosowanych systemów operacyjnych takich jak [[w:Linux|Linux]], [[w:Microsoft Windows|Microsoft Windows]] zostało napisanych w języku C.


=== Standaryzacje ===
=== Standaryzacje ===
[[Plik:1999 ISO C Concepts.png|mały|prawo|1999 ISO C Concepts]]
W 1978 roku Ritchie i Kerninghan opublikowali pierwszą książkę nt. języka C - "The C Programming Language". Owa książka przez wiele lat była swoistym "wyznacznikiem", jak programować w języku C. Była więc to niejako pierwsza standaryzacja, nazywana od nazwisk twórców "K&R". Oto nowości, wprowadzone przez nią do języka C w stosunku do jego pierwszych wersji (pochodzących z początku lat 70.):
W 1978 roku Ritchie i Kerninghan opublikowali pierwszą książkę nt. języka C - "The C Programming Language". Owa książka przez wiele lat była swoistym "wyznacznikiem", jak programować w języku C. Była więc to niejako pierwsza standaryzacja, nazywana od nazwisk twórców "K&R". Oto nowości, wprowadzone przez nią do języka C w stosunku do jego pierwszych wersji (pochodzących z początku lat 70.):
* możliwosć tworzenia struktur (słowo '''struct''')
* możliwość tworzenia struktur (słowo '''struct''')
* dłuższe typy danych (modyfikator '''long''')
* dłuższe typy danych (modyfikator '''long''')
* liczby całkowite bez znaku (modyfikator '''unsigned''')
* liczby całkowite bez znaku (modyfikator '''unsigned''')
Linia 35: Linia 41:
* utworzenie biblioteki standardowej
* utworzenie biblioteki standardowej
* wprowadzenie słowa kluczowego '''enum'''
* wprowadzenie słowa kluczowego '''enum'''

{{TODO|opisać pozostałe standaryzacje}}
Owe nieoficjalne rozszerzenia zagroziły spójności języka, dlatego też powstał standard, regulujący wprowadzone nowinki. Od 1983 roku trwały prace standaryzacyjne, aby w 1989 roku wydać standard C89 (poprawna nazwa to: ANSI X3.159-1989). Niektóre zmiany wprowadzono z języka C++, jednak rewolucję miał dopiero przynieść standard C99, który wprowadził m.in.:
* funkcje inline
* nowe typy danych (np. long long int)
* nowy sposób komentowania, zapożyczony od C++ (//)
* przechowywanie liczb zmiennoprzecinkowych zostało zaadaptowane do norm IEEE
* utworzono kilka nowych plików nagłówkowych (stdbool.h, [[C/inttypes.h|inttypes.h]])

[http://std.dkuug.dk/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf standard C99 jest dostępny tutaj].

Rozwój języka C trwał dalej. Na dzień dzisiejszy normą obowiązującą jest norma C11. Wprowadzono w niej m.in. wsparcie programowania równoległego.

Zobacz
* makro __STDC_VERSION__
* [[C/Używanie_kompilatora#flagi|flagi kompilatora starujące dialektami C]]: gcc -std=c1x
* [[C/Program#Formatowanie_kodu_i_style_programowania|C Standardy kodowania, formatowanie kodu]]


== Zastosowania języka C ==
== Zastosowania języka C ==
[[Plik:The C Programming Language.png|mały|prawo|The C Programming Language]]
Język C został opracowany jako strukturalny język programowania do celów ogólnych. Przez całą swą historię (czyli ponad 30 lat) służył do tworzenia przeróżnych programów - od systemów operacyjnych po programy nadzorujące pracę urządzeń przemysłowych. C, jako język dużo szybszy od języków interpretowanych (Perl, Python) oraz uruchamianych w maszynach wirtualnych (np. C#, Java) może bez problemu wykonywać złożone operacje nawet wtedy, gdy nałożone są dość duże limity czasu wykonywania pewnych operacji. Jest on przy tym bardzo przenośny - może działać praktycznie na każdej architekturze sprzętowej pod warunkiem opracowania odpowiedniego kompilatora. Często wykorzystywany jest także do oprogramowywania mikrokontrolerów i systemów wbudowanych. Jednak w niektórych sytuacjach język C okazuje się być mało przydatny, zwłaszcza chodzi tu o obliczenia matematyczne, wymagające dużej precyzji (w tej dziedzinie znakomicie spisuje się [[Fortran]] lub też dużej optymalizacji dla danego sprzętu (wtedy niezastąpiony jest język asemblera).
=== Zalety języka C ===


Język C został opracowany jako strukturalny język programowania do celów ogólnych. Przez całą swą historię (czyli ponad 30 lat) służył do tworzenia przeróżnych programów - od systemów operacyjnych po programy nadzorujące pracę urządzeń przemysłowych. C, jako język dużo szybszy od języków interpretowanych (Perl, Python) oraz uruchamianych w [[w:Maszyna wirtualna|maszynach wirtualnych]] (np. C#, Java) może bez problemu wykonywać złożone operacje nawet wtedy, gdy nałożone są dość duże limity czasu wykonywania pewnych operacji. Jest on przy tym bardzo przenośny - może działać praktycznie na każdej architekturze sprzętowej pod warunkiem opracowania odpowiedniego kompilatora. Często wykorzystywany jest także do oprogramowywania mikrokontrolerów i systemów wbudowanych. Wiele interpreterów języków skryptowych (Perl, PHP, Python. Ruby) jest napisanych w języku C.
Kolejną zaletą C jest jego dostępność - właściwie każdy system typu UNIX posiada kompilator C, w C pisane są funkcje systemowe.


Kolejną zaletą C jest jego dostępność - właściwie każdy system typu UNIX posiada kompilator C, w C pisane są funkcje systemowe. Dzięki temu w języku C można pisać aplikacje współpracujące z systemem uniksopodobnym (poprzez interfejs programowy systemu operacyjnego, np. POSIX). Przykładowym zastosowaniem jest programowanie równoległe poprzez funkcje "POSIX threads" albo dynamiczne ładowanie bibliotek (np. interpreter język Perl jest w stanie skompilować fragment kodu do poziomu bilioteki i ją podlinkować dynamicznie). Temat jest opisany w książkach o programowaniu systemu UNIX.
Problemem w przypadku C jest zarządzanie pamięcią, które nie wybacza programiście błędów, niewygodne operowanie napisami i niestety pewna liczba "kruczków", które mogą zaskakiwać nowicjuszy. C jest językiem dosyć niskiego poziomu więc wiele rzeczy trzeba w nim robić ręcznie, jednak zarazem umożliwia to robienie rzeczy nie przewidzianych w samym języku (np. implementację liczb 128 bitowych), a także łatwe łączenie C z [[Programowanie:Asembler|Asemblerem]].

=== Wady języka C ===

Problemem w przypadku C jest zarządzanie pamięcią, które nie wybacza programiście błędów, niewygodne operowanie napisami i niestety pewna liczba "kruczków", które mogą zaskakiwać nowicjuszy. Na tle młodszych języków programowania, C jest językiem dosyć niskiego poziomu więc wiele rzeczy trzeba w nim robić ręcznie, jednak zarazem umożliwia to robienie rzeczy nieprzewidzianych w samym języku (np. implementację liczb 128 bitowych), a także łatwe łączenie C z [[Asembler|Asemblerem]].

Język C jest dosyć okrojony, tzn. nie posiada wbudowanych bibliotek do typowych struktur danych i algorytmów (w przeciwieństwie do np. C++, Javy). Istnieją co prawda darmowe biblioteki, jednak są one rozwijane oddzielnie.

W przypadku konieczności dużej optymalizacji aplikacji dla danego sprzętu konkurencją staje się język asemblera. W większych projektach programiści sięgają często po obiektowy C++ (np. gry, CAD). W świecie oprogramowania biznesowego wykorzystywane są raczej technologie o szybszym procesie tworzenia aplikacji i mniejszym nacisku na wydajność (np. Java).

=== Język C w obliczeniach naukowo-technicznych ===

Standard C99 zbliżył możliwości języka C do języka Fortran. Dodano niektóre funkcje matematyczne i rozbudowano optymalizację dynamicznie alokowanej pamięci. Standard C11 przyniósł programowanie równoległe. W praktyce wiele zależy od kompilatora. Osiągi narzędzi GNU dla C i Fortranu obu języków bywają zbliżone. Język Fortran posiada jednak np. kotablice oraz obiekty nie występujące w języku C.

Z drugiej strony biblioteka GSL (GNU Scientific Library) jest przykładem projektu, który pomimo upływu czasu nadal wykorzystuje standard ANSI C. Jedną z przyczyn jest dążenie do przenośności. Implementacja liczb zmiennoprzecinkowych w standardzie o podwójnej precyzji została uznana za wystarczającą. W miarę upływu czasu w komputerach są dostępne wyższe precyzje (np. w standardzie C99 jest precyzja rozszerzona (long double)), w procesorach IBM POWER 9 jest możliwa precyzja poczwórna. Tworzenie w pełni uniwersalnego oprogramowania jest w praktyce niemożliwe (bo projekt się zaczyna coraz szybciej rozrastać). "Niech program najpierw w ogóle działa poprawnie, a dopiero potem działa szybko" (złota rada w książce Bruce Eckel-a, "Thinking in C++").


== Przyszłość C ==
== Przyszłość C ==
Pomimo sędziwego już wieku (C ma ponad 30 lat) nadal jest on jednym z najczęściej stosowanych języków programowania. Doczekał się już swoich następców, z którymi w niektórych dziedzinach nadal udaje mu się wygrywać. Widać zatem, że pomimo pozornej prostoty i niewielkich możliwości język C nadal spełnia stawiane przed nim wymagania. Warto zatem uczyć się języka C, gdyż nadal jest on wykorzystywany (i nic nie wskazuje na to, by miało się to zmienić), a wiedza którą zdobędziesz ucząc się C na pewno się nie zmarnuje.
Pomimo sędziwego już wieku (C ma ponad 40 lat) nadal jest on jednym z najczęściej stosowanych języków programowania. Doczekał się już swoich następców, z którymi w niektórych dziedzinach nadal udaje mu się wygrywać. Widać zatem, że pomimo pozornej prostoty i niewielkich możliwości język C nadal spełnia stawiane przed nim wymagania. Warto zatem uczyć się języka C, gdyż nadal jest on wykorzystywany (i nic nie wskazuje na to, by miało się to zmienić), a wiedza którą zdobędziesz ucząc się C na pewno się nie zmarnuje. Składnia języka C, pomimo że przez wielu uważana za nieczytelną, stała się podstawą dla takich języków jak C++, C# czy też Java.

Nowoczesny C
* [https://www.youtube.com/watch?v=QpAhX-gsHMs Modern C and What We Can Learn From It - Luca Sas [ ACCU 2021 <nowiki>]</nowiki>]
* [https://www.youtube.com/watch?v=ieERUEhs910 "New" Features in C - Dan Saks]



<noinclude>{{Nawigacja|C|
[[C/O podręczniku|O podręczniku]]|
[[C/Czego potrzebujesz|Czego potrzebujesz]]|
}}</noinclude>

{{BrClear}}
<noinclude>
<noinclude>
{{Wolumin}}
{{ProstaNawigacja|spis=Programowanie:C|poprzart=Programowanie:C:O podręczniku|poprz=O podręczniku|nastart=Programowanie:C:Czego potrzebujesz|nast=Czego potrzebujesz}}
</noinclude>
</noinclude>

Aktualna wersja na dzień 20:09, 20 cze 2024

C jest językiem programowania wysokiego poziomu. Jego nazwę interpretuje się jako następną literę po B (nazwa jego poprzednika), lub drugą literę języka BCPL (poprzednik języka B).


Cechy

[edytuj]
  • proceduralny[1]
  • imperatywny
  • ogólnego przeznaczenia
  • wystandaryzowany

Historia C

[edytuj]
Dennis Ritchie (right), the inventor of the C programming language, with Ken Thompson

W 1947 roku trzej naukowcy z Bell Telephone Laboratories - William Shockley, Walter Brattain i John Bardeen - stworzyli pierwszy tranzystor; w 1956 roku, w MIT skonstruowano pierwszy komputer oparty wyłącznie na tranzystorach: TX-O; w 1958 roku Jack Kilby z Texas Instruments skonstruował układ scalony. Ale zanim powstał pierwszy układ scalony, pierwszy język wysokiego poziomu został już napisany.

W 1954 powstał Fortran (Formula Translator), który zapoczątkował napisanie języka Fortran I (1956). Później powstały kolejno:

  • Algol 58 - Algorithmic Language w 1958 r.
  • Algol 60 (1960)
  • CPL - Combined Programming Language (1963)
  • BCPL - Basic CPL (1967)
  • B (1969)

i C w oparciu o B.

B został stworzony przez Kena Thompsona z Bell Labs; był to język interpretowany, używany we wczesnych, wewnętrznych wersjach systemu operacyjnego UNIX. Inni pracownicy Bell Labs, Thompson i Dennis Ritchie, rozwinęli B, nazywając go NB; dalszy rozwój NB dał C - język kompilowany. Większa część UNIX-a została ponownie napisana w NB, a następnie w C, co dało w efekcie bardziej przenośny system operacyjny. W 1978 roku wydana została książka pt. "The C Programming Language", która stała się pierwszym podręcznikiem do nauki języka C.

Możliwość uruchamiania UNIX-a na różnych komputerach była główną przyczyną początkowej popularności zarówno UNIX-a, jak i C; zamiast tworzyć nowy system operacyjny, programiści mogli po prostu napisać tylko te części systemu, których wymagał inny sprzęt, oraz napisać kompilator C dla nowego systemu. Odkąd większa część narzędzi systemowych była napisana w C, logiczne było pisanie kolejnych w tym samym języku.

Kilka z obecnie powszechnie stosowanych systemów operacyjnych takich jak Linux, Microsoft Windows zostało napisanych w języku C.

Standaryzacje

[edytuj]
1999 ISO C Concepts

W 1978 roku Ritchie i Kerninghan opublikowali pierwszą książkę nt. języka C - "The C Programming Language". Owa książka przez wiele lat była swoistym "wyznacznikiem", jak programować w języku C. Była więc to niejako pierwsza standaryzacja, nazywana od nazwisk twórców "K&R". Oto nowości, wprowadzone przez nią do języka C w stosunku do jego pierwszych wersji (pochodzących z początku lat 70.):

  • możliwość tworzenia struktur (słowo struct)
  • dłuższe typy danych (modyfikator long)
  • liczby całkowite bez znaku (modyfikator unsigned)
  • zmieniono operator "=+" na "+="

Ponadto producenci kompilatorów (zwłaszcza AT&T) wprowadzali swoje zmiany, nieobjęte standardem:

  • funkcje nie zwracające wartości (void) oraz typ void*
  • funkcje zwracające struktury i unie
  • przypisywanie wartości strukturom
  • wprowadzenie słowa kluczowego const
  • utworzenie biblioteki standardowej
  • wprowadzenie słowa kluczowego enum

Owe nieoficjalne rozszerzenia zagroziły spójności języka, dlatego też powstał standard, regulujący wprowadzone nowinki. Od 1983 roku trwały prace standaryzacyjne, aby w 1989 roku wydać standard C89 (poprawna nazwa to: ANSI X3.159-1989). Niektóre zmiany wprowadzono z języka C++, jednak rewolucję miał dopiero przynieść standard C99, który wprowadził m.in.:

  • funkcje inline
  • nowe typy danych (np. long long int)
  • nowy sposób komentowania, zapożyczony od C++ (//)
  • przechowywanie liczb zmiennoprzecinkowych zostało zaadaptowane do norm IEEE
  • utworzono kilka nowych plików nagłówkowych (stdbool.h, inttypes.h)

standard C99 jest dostępny tutaj.

Rozwój języka C trwał dalej. Na dzień dzisiejszy normą obowiązującą jest norma C11. Wprowadzono w niej m.in. wsparcie programowania równoległego.

Zobacz

Zastosowania języka C

[edytuj]
The C Programming Language

Zalety języka C

[edytuj]

Język C został opracowany jako strukturalny język programowania do celów ogólnych. Przez całą swą historię (czyli ponad 30 lat) służył do tworzenia przeróżnych programów - od systemów operacyjnych po programy nadzorujące pracę urządzeń przemysłowych. C, jako język dużo szybszy od języków interpretowanych (Perl, Python) oraz uruchamianych w maszynach wirtualnych (np. C#, Java) może bez problemu wykonywać złożone operacje nawet wtedy, gdy nałożone są dość duże limity czasu wykonywania pewnych operacji. Jest on przy tym bardzo przenośny - może działać praktycznie na każdej architekturze sprzętowej pod warunkiem opracowania odpowiedniego kompilatora. Często wykorzystywany jest także do oprogramowywania mikrokontrolerów i systemów wbudowanych. Wiele interpreterów języków skryptowych (Perl, PHP, Python. Ruby) jest napisanych w języku C.

Kolejną zaletą C jest jego dostępność - właściwie każdy system typu UNIX posiada kompilator C, w C pisane są funkcje systemowe. Dzięki temu w języku C można pisać aplikacje współpracujące z systemem uniksopodobnym (poprzez interfejs programowy systemu operacyjnego, np. POSIX). Przykładowym zastosowaniem jest programowanie równoległe poprzez funkcje "POSIX threads" albo dynamiczne ładowanie bibliotek (np. interpreter język Perl jest w stanie skompilować fragment kodu do poziomu bilioteki i ją podlinkować dynamicznie). Temat jest opisany w książkach o programowaniu systemu UNIX.

Wady języka C

[edytuj]

Problemem w przypadku C jest zarządzanie pamięcią, które nie wybacza programiście błędów, niewygodne operowanie napisami i niestety pewna liczba "kruczków", które mogą zaskakiwać nowicjuszy. Na tle młodszych języków programowania, C jest językiem dosyć niskiego poziomu więc wiele rzeczy trzeba w nim robić ręcznie, jednak zarazem umożliwia to robienie rzeczy nieprzewidzianych w samym języku (np. implementację liczb 128 bitowych), a także łatwe łączenie C z Asemblerem.

Język C jest dosyć okrojony, tzn. nie posiada wbudowanych bibliotek do typowych struktur danych i algorytmów (w przeciwieństwie do np. C++, Javy). Istnieją co prawda darmowe biblioteki, jednak są one rozwijane oddzielnie.

W przypadku konieczności dużej optymalizacji aplikacji dla danego sprzętu konkurencją staje się język asemblera. W większych projektach programiści sięgają często po obiektowy C++ (np. gry, CAD). W świecie oprogramowania biznesowego wykorzystywane są raczej technologie o szybszym procesie tworzenia aplikacji i mniejszym nacisku na wydajność (np. Java).

Język C w obliczeniach naukowo-technicznych

[edytuj]

Standard C99 zbliżył możliwości języka C do języka Fortran. Dodano niektóre funkcje matematyczne i rozbudowano optymalizację dynamicznie alokowanej pamięci. Standard C11 przyniósł programowanie równoległe. W praktyce wiele zależy od kompilatora. Osiągi narzędzi GNU dla C i Fortranu obu języków bywają zbliżone. Język Fortran posiada jednak np. kotablice oraz obiekty nie występujące w języku C.

Z drugiej strony biblioteka GSL (GNU Scientific Library) jest przykładem projektu, który pomimo upływu czasu nadal wykorzystuje standard ANSI C. Jedną z przyczyn jest dążenie do przenośności. Implementacja liczb zmiennoprzecinkowych w standardzie o podwójnej precyzji została uznana za wystarczającą. W miarę upływu czasu w komputerach są dostępne wyższe precyzje (np. w standardzie C99 jest precyzja rozszerzona (long double)), w procesorach IBM POWER 9 jest możliwa precyzja poczwórna. Tworzenie w pełni uniwersalnego oprogramowania jest w praktyce niemożliwe (bo projekt się zaczyna coraz szybciej rozrastać). "Niech program najpierw w ogóle działa poprawnie, a dopiero potem działa szybko" (złota rada w książce Bruce Eckel-a, "Thinking in C++").

Przyszłość C

[edytuj]

Pomimo sędziwego już wieku (C ma ponad 40 lat) nadal jest on jednym z najczęściej stosowanych języków programowania. Doczekał się już swoich następców, z którymi w niektórych dziedzinach nadal udaje mu się wygrywać. Widać zatem, że pomimo pozornej prostoty i niewielkich możliwości język C nadal spełnia stawiane przed nim wymagania. Warto zatem uczyć się języka C, gdyż nadal jest on wykorzystywany (i nic nie wskazuje na to, by miało się to zmienić), a wiedza którą zdobędziesz ucząc się C na pewno się nie zmarnuje. Składnia języka C, pomimo że przez wielu uważana za nieczytelną, stała się podstawą dla takich języków jak C++, C# czy też Java.

Nowoczesny C



  1. quora: Is-C-a-non-procedure-language-or-not