Co daje nam standard w kompilatorach języka C typu std=C11 i czym się różni od C99 i C98?

Standardy w kompilatorach C, takie jak C11, C99 i C90 (czasami mylony z C98), są kluczowe dla zapewnienia zgodności kodu między różnymi kompilatorami i platformami.

Każdy z tych standardów języka programowania C wprowadza nowe funkcje i udoskonalenia w języku C. Oto główne różnice między nimi:

C90 (znany też jako ANSI C lub C89)

  • Wprowadzony w: 1989 (nazywany też ANSI C)
  • Najważniejsze cechy:
    • Podstawowe typy danych, struktury, unie, wyliczenia
    • Standardowa biblioteka C (stdio.h, stdlib.h, string.h itd.)
    • Brak wsparcia dla zmiennych o zmiennej długości (VLA)
    • Brak funkcji inline

C99

  • Wprowadzony w: 1999
  • Najważniejsze cechy:
    • Deklaracje w dowolnym miejscu: Można deklarować zmienne w dowolnym miejscu w kodzie, a nie tylko na początku bloku.
    • Komentarze stylu C++: Dodano wsparcie dla komentarzy w stylu C++ (//).
    • Typy całkowite o stałej szerokości: Wprowadzenie nagłówka <stdint.h> z typami takimi jak int32_t, uint64_t itd.
    • Złożone typy liczbowe: Dodano wsparcie dla typów złożonych (_Complex).
    • Zmienna długość tablic (VLA): Możliwość deklarowania tablic o zmiennej długości.
    • Restrict: Nowe słowo kluczowe restrict dla wskaźników, poprawiające optymalizacje.

C11

  • Wprowadzony w: 2011
  • Najważniejsze cechy:
    • Zgodność z wcześniejszymi standardami: Zapewniono wsteczną zgodność z C99.
    • Atomowość: Dodano wsparcie dla operacji atomowych (stdatomic.h).
    • Typy anonimowe: Możliwość używania typów anonimowych.
    • Równoczesność: Nowe funkcje i makra wspierające równoczesność (threads.h).
    • _Generic: Dodano słowo kluczowe _Generic do tworzenia genericznych makr.
    • Static_assert: Dodano static_assert do sprawdzania warunków w czasie kompilacji.
    • Anulowanie VLAs (opcjonalne): VLA (Variable Length Arrays) stały się opcjonalne, co oznacza, że nie wszystkie kompilatory muszą je wspierać.

Wpływ standardów języka C na rozwój systemów operacyjnych

Systemy operacyjne, zwłaszcza Unix i Linux, powstały dzięki językowi C.

UNIX i C – fundament nowoczesnych systemów operacyjnych

Pierwsze wersje UNIX-a były napisane w asemblerze, ale w 1973 roku system UNIX został przepisany w C. To pozwoliło na łatwiejsze przenoszenie kodu na różne platformy, co było kluczowe dla jego popularyzacji. Początkowo UNIX był systemem o licencji zamkniętej i tylko komputery na uczelniach miały dostęp do kodu UNIXa, który był napisany w języku Asembler i C. Tak rozpowszechnił się język C jako język programowania systemowego. To był ważny punkt startowy do powstania systemów z otwartym kodem *BSD. Po czym z kolei Linus Torvalds zainspirowany tym ruchem zaproponował swoje jądro Linux. Tak w skrócie narodził się Linux 🙂

Linux i standardy C

Jądro Linuxa jest zgodne głównie ze standardem C11, choć niektóre fragmenty kodu bazują na starszych rozwiązaniach. Nowoczesne standardy pomagają w:

  • Zarządzaniu pamięcią – np. aligned_alloc z C11,
  • Programowaniu wielowątkowym – dzięki stdatomic.h,
  • Lepszej przenośności kodu – ułatwiają kompatybilność na różnych platformach.

Podsumowanie

Każdy z tych standardów wprowadza różne ulepszenia, które czynią język C bardziej elastycznym i lepiej dostosowanym do nowoczesnych potrzeb programistycznych:

  • C90: Podstawy języka C.
  • C99: Duże ulepszenia, szczególnie w zakresie zmiennych o zmiennej długości, nowych typów danych i deklaracji zmiennych w dowolnym miejscu.
  • C11: Nowoczesne funkcje takie jak atomowość, równoczesność i genericy, które ułatwiają programowanie współczesnych aplikacji.

Standardy te pozwalają programistom na tworzenie bardziej złożonych i wydajnych aplikacji, jednocześnie zapewniając, że kod jest przenośny i zgodny z różnymi kompilatorami i platformami.

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.