9

我终于让自己看一些 linux 代码。我现在正在看“ls.c”。

在底部的函数“usage()”中,我发现了很多这样的语句:

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

这是什么意思?它是像 L"string" 或 _T"string" 还是全新的东西?我还必须承认我不知道用什么词来搜索这样的东西。

希望您能够帮助我。

4

3 回答 3

11

这是 libintl aka gettext 用于可翻译字符串的约定。当它运行时,gettext函数(_别名为)将返回原始字符串或翻译后的字符串,具体取决于语言环境设置和所述字符串的可用性。

于 2012-05-12T17:59:05.650 回答
4

_是一个经常与GNU gettext 包一起使用的宏。

GNU gettext 是一个包:

  • 获取供人类阅读的消息字符串列表,并将这些字符串翻译成其他语言,并将它们编译到数据库中;
  • 提供了一个名为 的例程,gettext()用于在该数据库中查找消息字符串并将消息的翻译返回为特定语言。

如果程序想要以用户在环境变量中选择的语言打印消息并通过setlocale()调用获取,它通常会执行以下操作

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

gettext()将在数据库中查找字符串的适当翻译"I cannot find the file named %s\n"并返回翻译后的字符串。

但是,这有点尴尬。作为 GNU gettext 的文档说明,许多程序使用宏来使_(string成为string)的别名。gettext()

于 2012-05-12T18:18:25.730 回答
1

当然,函数名可以包含一个_,并且 an_可以开始一个函数名。因此,可以简单地命名一个函数_

所发生的#define只是调用了一个或一个真正的函数_

于 2012-05-12T17:57:29.410 回答