fputs (_ ("")) Wofür steht der Unterstrich?

8

Endlich habe ich mich selbst etwas Linux-Code angeschaut. Ich schaue gerade auf "ls.c".

Bei der Funktion "usage ()" unten habe ich viele dieser Aussagen gefunden:

%Vor%

Was bedeutet _ ("")? Ist es etwas wie L "string" oder _T "string" oder etwas völlig neues? Ich muss auch zugeben, dass ich nicht weiß, mit welchen Worten ich nach so etwas suchen kann.

Ich hoffe, du kannst mir helfen.

    
gcochard 12.05.2012, 17:53
quelle

3 Antworten

10

Es ist eine Konvention, die von libintl a.k.a.gettext für übersetzbare Zeichenfolgen verwendet wird. Wenn es ausgeführt wird, gibt gettext function (dem _ Alias ​​zugewiesen ist) entweder die ursprüngliche oder die übersetzte Zeichenfolge zurück, abhängig von den Gebietsschemaeinstellungen und der Verfügbarkeit der Zeichenfolge.

    
Cat Plus Plus 12.05.2012, 17:59
quelle
4

_ ist ein Makro, das oft mit dem GNU gettext-Paket verwendet wird.

GNU gettext ist ein Paket, das:

  • nimmt Listen von Nachrichtenstrings, die für Menschen zu lesen sind, und Übersetzungen dieser Strings in andere Sprachen, und kompiliert sie in Datenbanken;
  • stellt eine Routine mit dem Namen gettext() zur Verfügung, um Nachrichtenstrings in dieser Datenbank nachzuschlagen und die Übersetzung für die Nachricht in eine bestimmte Sprache zurückzugeben.

Wenn ein Programm eine Nachricht in der Sprache drucken wollte, die vom Benutzer in einer Umgebungsvariablen ausgewählt und von einem setlocale() -Aufruf abgerufen wurde, würde es normalerweise etwas wie

tun %Vor%

gettext() sucht die entsprechende Übersetzung der Zeichenkette "I cannot find the file named %s\n" in der Datenbank und gibt die übersetzte Zeichenkette zurück.

Aber das ist ein bisschen peinlich; als Dokumentation für GNU-Gettext-Notizen verwenden viele Programme ein Makro, um es einfach zu machen _( Zeichenfolge ) ist ein Alias ​​für gettext( Zeichenfolge ) .

    
user862787 12.05.2012 18:18
quelle
1

Funktionsnamen können natürlich ein _ enthalten, und ein _ kann einen Funktionsnamen beginnen. So ist es möglich, einfach eine Funktion namens _ zu benennen.

Alles was passiert, ist, dass eine #define oder eine echte Funktion _ heißt.

    
DigitalRoss 12.05.2012 17:57
quelle

Tags und Links