17 Sep C język programowania Wikipedia, wolna encyklopedia
Użycie kwalifikatora long jest dopuszczalne również w połączeniu z typem double, choć standard C nie gwarantuje, że uzyskany w ten sposób typ będzie miał większą pojemność niż wyjściowy. Podobnie jak w przypadku liczb całkowitych, dostępne typy zmiennoprzecinkowe również nie mają sztywno określonego zakresu wartości oraz minimalnej dokładności76. W trakcie jego wywoływania mogą także występować skutki uboczne42 (na przykład inkrementacja zmiennej43). Kolejność obliczania wartości i zachodzenia skutków ubocznych jest nieokreślona, Automatyczne doradcy: możliwości, porównanie lecz zgodna z pierwszeństwem operatorów.
- Jedynie brak notacji dla literału powodował, że nie były typem pierwszoklasowym.
- Jednocześnie narzędzia wspomagające pisanie kodu nie są w stanie sprawdzić, czy konwersja typów jest sensowna174.
- W książce Kernighana i Ritchiego znalazł się również opis biblioteki wejścia/wyjścia.
- Deklaracja obiektu polega na podaniu typu danych oraz opcjonalnie klasy pamięci i sposobu linkowania, po których występuje przynajmniej jeden identyfikator tworzonego obiektu (lub obiektów)50.
- XX wieku C zdobył popularność również wśród twórców oprogramowania aplikacyjnego.
Dodatek A – Biblioteka standardowa
Od tego czasu jego rozwojem zajmuje się grupa robocza w ramach ISO. Cechy języka, krytykowane jako trudne do odczytania lub zrozumienia, bywają również wykorzystywane do celowego zaciemniania kodu, czego skrajnym przypadkiem są programy zgłaszane do konkursu IOCCC180. Obiektowi można również nadać klasę extern, która jawnie informuje, że cechuje się on linkowaniem zewnętrznym.
Inne reprezentacje
Są one dostępne przez cały czas wykonywania bloku, gdzie zostały zadeklarowanef. W przypadku rekurencyjnego wkroczenia do tego samego bloku, za każdym razem tworzona jest osobna instancja obiektu118. W przeciwieństwie do tablic, takie składowe mogą być różnych typów, a poszczególne pola rozróżnia się z użyciem ich identyfikatorów89. Każda struktura stanowi odrębną przestrzeń nazw, toteż pole o tej samej nazwie może występować w kilku strukturach9041. Zagnieżdżanie struktur jest dozwolone – składowe mogą również być strukturami.
Instrukcje sterujące
Piątą wersję standardu języka C opublikowano w październiku 2024 roku1. W odróżnieniu od poprzedniego wydania standardu, w tym wprowadzono normatywne zmiany27. Język taki, jak opisany przez Kernighana i Ritchiego w 1978 roku nie przewidywał żadnej możliwości określenia typów przyjmowanych przez parametry funkcji4. Powstały odrębne narzędzia, takie jak lint, które przeprowadzały analizę kodu bardziej rygorystyczną Warren Buffett niż kompilator, a następnie zgłaszały problemy ze spójnością i przestrzeganiem dobrych praktyk6.
Nie zapewnia ono jednak przenośności między różnymi platformami182. Jest to jeden z głównych powodów nieprzenaszalności kodu, który ujawnia się podczas wymiany danych poprzez pamięć współdzieloną, masową lub ich transmisję183. Jedną z naczelnych zasad ducha programowania w C jest tworzenie wydajnego kodu nawet za cenę jego przenośności184. Podczas prac nad językiem Kernighan i Ritchie nie skupiali się na ustandaryzowaniu biblioteki standardowej. Odpowiednie funkcje dostarczał system Unix, niezależnie od stosowanego kompilatora. Komitet ANSI przygotował opis biblioteki standardowej języka C, wymagający dostarczenia programiście odpowiednich funkcji o ściśle określonym działaniu i przeznaczeniu14.
ANSI C i ISO C
- Funkcjonalności takie jak kompilacja warunkowa czy parametryzowane makra zostały wprowadzone niedługo później – przez Mike’a Leska(inne języki) oraz Johna Reisera.
- Zmienne statyczne i zewnętrzne są inicjalizowane zerem, jeśli nie podano żadnej wartości początkowej125.
- Podobnie nie są określone ich rozmiary w bitach lub bajtach70.
W następnych latach, wraz z pracami nad przenośnością systemu Unix, została ona rozwinięta i usprawniona. Funkcje biblioteczne nie zostały przez autorów książki uznane za część języka, lecz dodatek do niego410. Język C powstawał jako rozwinięcie języka B, wzbogacając się stopniowo o kolejne funkcje. Okresy najszybszego rozwoju języka C to lata 1972–1973 oraz 1977–1979. To czas zdobywania przez niego popularności, czego efektem była dostępność kompilatorów dla praktycznie wszystkich używanych wtedy architektur komputerów i systemów operacyjnych.
Składnia
Wszystkie operacje, które są dopuszczalne dla struktur, można wykonywać również na uniach97. Składa się ono z listy stałych symbolicznych, każda o wartości będącej liczbą całkowitą. Typy wyliczeniowe funkcjonalnie są równoważne całkowitoliczbowym7869. Dokładny typ liczbowy, realizujący wyliczenie jest zależny od implementacji, a od C23 można go także wskazać jawnie w jego definicji7930. Preprocesor w języku C pozwala na manipulację kodem źródłowym przed właściwą kompilacją. Wspiera mechanizmy kompilacji Wskazówki dotyczące wyboru najlepszego brokera kredytów hipotecznych warunkowej (dyrektywa #if i jej warianty) oraz dołączania innych plików źródłowych (#include).
Deklarując obiekt, można wskazać jego klasę pamięci, która określa między innymi jego czas życia i zasięg widoczności. Zmienne lokalne, o ile nie użyto żadnego specyfikatora klasy pamięci, są deklarowane jako zmienne automatyczne47. Wartości niezainicjalizowanych zmiennych są niezdefiniowane i mogą mieć wartość zależną od kompilatora lub od tego, co akurat było w pamięci121.
Jest to domyślna własność zmiennych deklarowanych na zewnątrz funkcji124. Zmienne statyczne i zewnętrzne są inicjalizowane zerem, jeśli nie podano żadnej wartości początkowej125. Każdy obiekt (poza polami bitowymi) składa się z ciągłej sekwencji bajtów, których kolejność i sposób kodowania wartości może zależeć od implementacji98.
Kwalifikatory typów
Przechowują one liczby całkowite, lecz ich dokładny typ zależy od implementacji103. Razem z typem int można stosować kwalifikatory short oraz long. Pozwalają one programiście wykorzystywać typy danych krótsze i dłuższe niż naturalne dla danej architektury. Ponadto nazwę każdego typu, służącego do przechowywania liczb całkowitych, można również poprzedzić słowem signed lub unsigned, aby określić, czy dany obiekt ma być w stanie przechowywać liczby ujemne71. Reprezentacja bitowa wartości, które można zapisać zarówno w wariancie signed, jak i unsigned danego typu jest w obu wariantach taka sama72.
No Comments