2016-01-20 38 views
5

Obecnie studiuję C, jeśli to pytanie wydaje się łatwe lub nowe, to wiesz dlaczego. c sekwencja ucieczki wymieniona w człowieku, ale nie jest dostępna w C

Odczyt man page do printf I znaleziono \ c wymienione jako sekwencja ucieczki. Jej opis jest

produkować żadnych dalszych wyjście

nigdy nie widział i słyszał o \ c przed tym momencie. Więc postanowiłem go wypróbować w prosty program Hello World:

printf("\nHello World\n\n\c"); 

W rezultacie, gcc daje mi to ostrzeżenie:

ostrzeżenie: brak sekwencji ucieczki: '\ c' [włączone default]

brzmi to trochę dziwne dla mnie, więc poszedłem koryta go dalej śledztwo: poszedłem do Wikipedia i \ c nie został wymieniony jako ucieczki sekwencja ... Dlatego próbowałem przeszukiwać sieć, a tutaj na przepełnienie stosu. Znalazłem bardzo niewiele odniesień do \ c (a właściwie dwa) jak omówiono w this topic i this one (myślę, że ten ostatni nie jest bardzo podobne do C, ale wydaje się, że mówimy o „tym samym \ c ", czytając podany opis). Czy ktoś mógłby mi pomóc zrozumieć tę rzecz?

+0

nie wiem jakiegokolwiek odniesienia w pracy jako 'standardzie C11'. czy możesz umieścić link do strony podręcznika? –

+0

@SouravGhosh http://linux.die.net/man/1/printf, jest również wyświetlany, gdy wpisuję printf man w terminalu. –

+0

nie jest stroną podręcznika 1 jest dla poleceń? Po prostu mówiąc, nie widziałem nic na człowieku 3 –

Odpowiedz

6

Jesteś nie czytając prawidłową stronę podręcznika. To, na co patrzysz, to: man 1 printf, które dotyczy komendy powłoki printf, a nie funkcji standardowej C printf.

Zastosowanie:

man 3 printf 

czytać o funkcji C biblioteki. \c nie znajduje się w C i dlatego nie jest rozpoznawany przez printf(3).

Sprawdzana przez Ciebie wersja printf(1) działa zgodnie z dokumentacją.

$ /usr/bin/printf "ABC\chi" 

produkuje:

ABC 

Należy pamiętać, że strony man Linux w ogóle może mieć również dodatkowe rozszerzenia niestandardowe (specyficzne dla systemu Linux lub glibc) i rozszerzeń POSIX itp Niestandardowe rozszerzenia są zwykle udokumentowane jako takie, ale łatwe do przeoczenia. Jeśli więc szukasz tego, co mówi standard C, powinieneś spojrzeć na standard C. Oto online draft.

Jeśli zastanawiasz się co liczba przekazane man jest, że to sekcja numer. 3 odpowiada funkcji biblioteki. Szczegółowe informacje można znaleźć pod adresem: man man. Oto podsumowanie sekcjach:

1 Executable programs or shell commands 
    2 System calls (functions provided by the kernel) 
    3 Library calls (functions within program libraries) 
    4 Special files (usually found in /dev) 
    5 File formats and conventions eg /etc/passwd 
    6 Games 
    7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) 
    8 System administration commands (usually only for root) 
    9 Kernel routines [Non standard] 
+0

Świetne podsumowanie! Skąd to masz? –

+1

@terencehill Masz na myśli numery sekcji? Od 'man man'. –

+0

Myślałem o tym, ale nie ma go na OS X. Może powinienem rozważyć zamianę na Linuksa ... –