2012-05-12 19 views
8

Finalmente pude ver algún código de Linux. Estoy buscando ahora en "ls.c".fputs (_ ("")) ¿Qué significa el guión bajo?

En la función "uso()" en la parte inferior me encontré con un montón de estos estados:

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); 

¿Qué _ ("") significa? ¿Es algo así como L "string" o "T" string "o algo completamente nuevo? También debo admitir que no sé qué palabras usar para buscar algo como esto.

Espero que me puedas ayudar.

+3

Mire a través de la fuente un '#define _'. O compila con 'gcc -PE' para ver la salida del preprocesador. –

+2

Solo un pequeño detalle, este no es realmente el código de Linux. El código que estás viendo es parte de GNU coreutils. Si bien los coreutils de GNU son parte de muchas distribuciones de Linux, no forman parte de Linux. Es posible tener un sistema Linux en funcionamiento sin coreutils de GNU. –

+0

Un Linux ampliamente utilizado sin gnu utils es Android – hirschhornsalz

Respuesta

10

Es una convención utilizada por libintl a.k.a. gettext, para cadenas traducibles. Cuando se ejecuta, la función gettext (a la que se asigna un alias a _) devolverá la cadena original o traducida, según la configuración regional y la disponibilidad de dicha cadena.

+0

thx acerca de la información adicional con gettext, gettext parece ser muy importante y voy a echar un vistazo más a este tema. :) –

+0

ver también http://www.gnu.org/software/gettext/manual/html_node/Overview.html – aschepler

1

Los nombres de funciones pueden, por supuesto, contener un _, y un _ puede comenzar un nombre de función. Por lo tanto, es posible nombrar una función simplemente _.

Todo lo que ocurre es que #define o una función real se llama _.

4

_ es una macro de uso frecuente con the GNU gettext package.

GNU gettext es un paquete que:

  • toma listas de cadenas de mensajes destinados a los seres humanos de leer, y las traducciones de las cadenas en otros idiomas, y las compila en bases de datos;
  • proporciona una rutina, llamada gettext(), para buscar cadenas de mensajes en esa base de datos y devolver la traducción del mensaje a un idioma particular.

Si un programa quería imprimir un mensaje en el idioma seleccionado por el usuario en una variable de entorno y recogido por una llamada setlocale(), que normalmente hacer algo como

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

gettext() miraría hasta la traducción adecuada de la cadena "I cannot find the file named %s\n" en la base de datos y devolver la cadena traducida.

Sin embargo, eso es un poco incómodo; as the documentation for GNU gettext notes, muchos programas utilizan una macro para hacer sólo _(cadena) ser un alias para gettext(cadena).

Cuestiones relacionadas