Szukaj…


Uwagi

Termin literał jest powszechnie używany do opisania sekwencji znaków w kodzie C, która oznacza stałą wartość, taką jak liczba (np. 0 ) lub ciąg znaków (np. "C" ). Ściśle mówiąc, standard używa terminu stała dla stałych liczb całkowitych, zmiennych zmiennoprzecinkowych, stałych wyliczania i stałych znakowych, rezerwując termin „literał” dla literałów łańcuchowych, ale nie jest to powszechne użycie.

Literały mogą mieć prefiksy lub sufiksy (ale nie oba), które są dodatkowymi znakami, które mogą rozpoczynać lub kończyć literał w celu zmiany jego domyślnego typu lub reprezentacji.

Literały całkowite

Literały całkowite służą do zapewnienia wartości całkowitych. Obsługiwane są trzy bazy liczbowe, oznaczone prefiksami:

Baza Prefiks Przykład
Dziesiętny Żaden 5
Octal 0 0345
Szesnastkowy 0x lub 0X 0x12AB , 0X12AB , 0x12ab , 0x12Ab

Zauważ, że ten tekst nie zawiera żadnego znaku, więc literały całkowite są zawsze dodatnie. Coś w rodzaju -1 jest traktowane jako wyrażenie, które ma jedną literał całkowitą ( 1 ), która jest negowana przez -

Typ literału dziesiętnego liczby całkowitej jest pierwszym typem danych, który może pasować do wartości od int i long . Od C99 long long jest obsługiwany również w przypadku bardzo dużych literałów.

Typ ósemkowej lub szesnastkowej liczby całkowitej jest pierwszym typem danych, który może pasować do wartości od int , unsigned , long i unsigned long . Od C99 long long i unsigned long long są obsługiwane także dla bardzo dużych literałów.

Używając różnych sufiksów, można zmienić domyślny typ literału.

Przyrostek Wyjaśnienie
L , l long int
LL , ll (od C99) long long int
U , u unsigned

Przyrostki U i L / LL można łączyć w dowolnej kolejności i każdym przypadku. Duplikowanie sufiksów (np. Podawanie dwóch sufiksów U ) jest błędem, nawet jeśli mają różne przypadki.

Literały łańcuchowe

Literały łańcuchowe służą do określania tablic znaków. Są to ciągi znaków zawarte w podwójnych cudzysłowach (np. "abcd" i mają typ char* ).

Przedrostek L powoduje, że literał jest szeroką tablicą znaków, typu wchar_t* . Na przykład L"abcd" .

Od C11 istnieją inne prefiksy kodowania, podobne do L :

prefiks typ podstawowy kodowanie
Żaden char zależny od platformy
L wchar_t zależny od platformy
u8 char UTF-8
u char16_t zwykle UTF-16
U char32_t zwykle UTF-32

W przypadku dwóch ostatnich można zapytać za pomocą makr testu funkcji, jeśli kodowanie jest faktycznie odpowiednim kodowaniem UTF.

Literały zmiennoprzecinkowe

Literały zmiennoprzecinkowe służą do reprezentowania liczb rzeczywistych ze znakiem. Do określenia rodzaju literału można użyć następujących sufiksów:

Przyrostek Rodzaj Przykłady
Żaden double 3.1415926 -3E6
f , F float 3.1415926f 2.1E-6F
l , L long double 3.1415926L 1E126L

Aby użyć tych sufiksów, literał musi być literałem zmiennoprzecinkowym. Na przykład 3f jest błędem, ponieważ 3 jest literałem całkowitym, a 3.f lub 3.0f są poprawne. W przypadku long double zalecenia zaleca się zawsze używać long double L ze względu na czytelność.

Literały postaci

Literały znakowe to specjalny rodzaj literałów całkowitych, które są używane do reprezentowania jednego znaku. Są one ujęte w pojedyncze cudzysłowy, np. 'a' i mają typ int . Wartość literału jest liczbą całkowitą zgodnie z zestawem znaków maszyny. Nie pozwalają na przyrostki.

Przedrostek L przed literałem znaku powoduje, że jest to szeroki znak typu wchar_t . Podobnie, ponieważ prefiksy C11 u i U sprawiają, że są to szerokie znaki odpowiednio typu char16_t i char32_t .

W przypadku zamiaru przedstawienia pewnych znaków specjalnych, takich jak znak, który nie jest drukowany, stosowane są sekwencje specjalne. Sekwencje specjalne używają sekwencji znaków, które są tłumaczone na inną postać. Wszystkie sekwencje specjalne składają się z dwóch lub więcej znaków, z których pierwszy to odwrotny ukośnik \ . Znaki występujące bezpośrednio po odwrotnym ukośniku określają, jak literał znak jest interpretowany w sekwencji.

Sekwencja ewakuacyjna Reprezentowana postać
\b Backspace
\f Form feed
\n Przesuw linii (nowa linia)
\r Zwrot karetki
\t Zakładka pozioma
\v Zakładka pionowa
\\ Ukośnik wsteczny
\' Pojedynczy cudzysłów
\" Podwójny cudzysłów
\? Znak zapytania
\nnn Wartość ósemkowa
\xnn ... Wartość szesnastkowa
C89
Sekwencja ewakuacyjna Reprezentowana postać
\a Alarm (dźwięk, dzwonek)
C99
Sekwencja ewakuacyjna Reprezentowana postać
\unnnn Uniwersalna nazwa postaci
\Unnnnnnnn Uniwersalna nazwa postaci

Uniwersalna nazwa znaku to punkt kodowy Unicode. Uniwersalna nazwa postaci może być przypisana do więcej niż jednego znaku. Cyfry n są interpretowane jako cyfry szesnastkowe. W zależności od używanego kodowania UTF uniwersalna sekwencja nazw znaków może dać punkt kodowy składający się z wielu znaków zamiast jednego normalnego char .

Podczas korzystania z sekwencji ucieczki przejścia do wiersza w trybie tekstowym we / wy jest on konwertowany na bajt lub wiersz bajtów specyficzny dla systemu operacyjnego.

Sekwencja zmiany znaczenia znaku zapytania służy do unikania oznaczeń trigraficznych . Na przykład ??/ jest kompilowany jako trygraf reprezentujący znak odwrotnego ukośnika '\' , ale użycie ?\?/ Dałoby ciąg "??/" .

Może być jeden, dwa lub trzy cyfry ósemkowe n w kolejności wartości ósemkowe.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow