2012-06-17 5 views

Odpowiedz

8

Uniwersalna nazwa postaci wygląda na \uFFFD lub \U0010FFFD. Jest to metoda pisania postaci w kodzie źródłowym, w której kodowanie kodu źródłowego nie obejmuje tej postaci.

C++ określa, że ​​znaki spoza podstawowego zestawu znaków źródłowych zostaną przekształcone w nazwy uniwersalnych znaków w pierwszej fazie tłumaczenia. Powodem tego jest to, że uniwersalne nazwy postaci i znaki, które nie znajdują się w podstawowym zestawie znaków źródłowych, ale które są w źródłowym zestawie znaków, traktowane są identycznie.

as-jeśli zasada oznacza, że ​​realizacja nie jest rzeczywiście konieczne do wykonania tej uniwersalnej Nazwa postaci tłumaczenia, o ile traktuje znaki rozszerzone napisane jak nazwy znaków uniwersalnych identycznie dodatkowe znaki, które pojawiają się dosłownie w źródle.

+0

Czy wszystkie są znakami zakodowanymi w Unicode? Więc chińskie znaki są na przykład konwertowane na unicodefirst? – unj2

+0

Tak, nazwy uniwersalnych znaków używają krótkich nazw Unicode (liczba Unicode jest powiązana z każdym znakiem). Na przykład, Unicode przypisuje znakowi "⻰" krótką nazwę U + 2EF0, a więc uniwersalną nazwą znaku dla tego znaku byłoby '\ u2EF0' lub' \ U00002EF0' – bames53

+0

Tak więc napisałem program do przekonwertowania pliku źródłowego C++ na nic ale uniwersalne nazwy postaci. G ++ po raz pierwszy dał kilka błędów dotyczących używania uniwersalnych znaków w identyfikatorach, a następnie zakończył się z 'error: '#include \ 012int main() {\ 012 \ 011printf (" Hello, world! \ N "); \ 012 \ 011return 0; \ 012} \ 012 "nie określa typu". Tak więc albo * istnieje * różnica między uniwersalnymi nazwami postaci a rzeczywistymi znakami, które reprezentują, albo jest błąd w GNU C++. –