2012-05-12 19 views
8

Finalmente mi sono messo a guardare qualche codice Linux. Sto guardando proprio ora a "ls.c".fputs (_ ("")) cosa significa la sottolineatura?

Alla funzione "utilizzo()" in fondo ho trovato un sacco di queste affermazioni:

fputs (_("\ 
    List information about the FILEs (the current directory by default).\n\ 
    Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.\n\ 
    \n\ 
    "), stdout); 

Cosa significa _ ("") significa? È qualcosa come L "string" o _T "string" o qualcosa di completamente nuovo? Devo anche ammettere che non so quali parole usare per cercare qualcosa di simile.

Spero che tu possa aiutarmi.

+3

Guardare attraverso il sorgente per un '#define _'. Oppure compila con 'gcc -PE' per vedere l'output del preprocessore. –

+2

Solo un piccolo nitpick, questo non è in realtà un codice Linux. Il codice che stai guardando fa parte dei coreutils GNU. Sebbene i coreutils GNU facciano parte di molte distribuzioni Linux, non fanno parte di Linux. È possibile avere un sistema Linux funzionante senza coreutils GNU. –

+0

Un Linux ampiamente utilizzato senza utilità GNU è Android – hirschhornsalz

risposta

10

È una convenzione utilizzata da libintl a.k.a. gettext, per stringhe traducibili. Quando è in esecuzione, la funzione gettext (a cui è assegnato l'offset da _) restituirà una stringa originale o tradotta, in base alle impostazioni locali e alla disponibilità di tale stringa.

+0

riguardo le informazioni extra con gettext, gettext sembra essere molto importante e avrò un ulteriore sguardo a questo argomento. :) –

+0

vedere anche http://www.gnu.org/software/gettext/manual/html_node/Overview.html – aschepler

1

I nomi di funzione possono, ovviamente, contenere uno _ e un _ può iniziare un nome di funzione. Quindi, è possibile nominare semplicemente una funzione _.

Tutto ciò che sta accadendo è che una #define o una funzione reale è chiamata _.

4

_ è una macro utilizzata spesso con the GNU gettext package.

GNU gettext è un pacchetto che:

  • prende liste di stringhe messaggio destinato per gli esseri umani da leggere, e traduzioni di quelle stringhe in altre lingue, e li compila in banche dati;
  • fornisce una routine, denominata gettext(), per cercare le stringhe di messaggi in quel database e restituire la traduzione per il messaggio in una lingua specifica.

Se un programma voluto stampare un messaggio nella lingua selezionata dall'utente in una variabile di ambiente e prese da una chiamata setlocale(), si farebbe normalmente qualcosa come

fprintf(stderr, gettext("I cannot open the file named %s\n"), filename); 

gettext() apparirebbe la traduzione appropriata della stringa "I cannot find the file named %s\n" nel database e restituire la stringa tradotta.

Tuttavia, questo è un po 'imbarazzante; as the documentation for GNU gettext notes, molti programmi utilizzano una macro per fare solo _(stringa) essere un alias per gettext(stringa).