fputs(_(""))是什么意思?下划线代表什么?

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);
< p > _( "" ) 是什么意思?它类似于 L"string"_T"string" 还是一些完全新的东西?我必须承认,我不知道该用什么词来搜索这样的信息。


4
жҹҘжүҫжәҗд»Јз Ғдёӯзҡ„#define _гҖӮжҲ–иҖ…дҪҝз”Ёgcc -PEзј–иҜ‘пјҢд»ҘжҹҘзңӢйў„еӨ„зҗҶеҷЁиҫ“еҮәгҖӮ - Kerrek SB
3
仅有一处小小的指摘,这并不是 Linux 代码。你看到的代码是 GNU coreutils 的一部分。虽然 GNU coreutils 是许多 Linux 发行版的组成部分,但并非 Linux 的一部分。拥有完整的 Linux 系统也可能没有 GNU coreutils。 - Greg Inozemtsev
一个广泛使用的没有gnu工具的Linux是Android。 - Gunther Piez
@GregInozemtsev 是的,我知道,但我需要一个开始的地方,所以我决定从核心实用程序开始:p - user945967
1
可能是Underscore函数的重复问题。 - Wooble
这回答了你的问题吗?_("text"),即下划线括号字符,是什么意思?(https://dev59.com/xmUp5IYBdhLWcg3wf3kG) - phuclv
3个回答

11

这是 libintl(又称 gettext)用于可翻译字符串的惯例。当它运行时,gettext 函数(别名为 _)将根据语言环境设置和相应字符串的可用性返回原始或已翻译的字符串。


谢谢关于gettext的额外信息,gettext似乎非常重要,我将进一步研究这个主题。 :) - user945967

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)就可以作为gettext(string)的别名。


1

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

发生的一切都是一个#define或者真实的函数被称为_


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接