_("写错误")是什么意思?

时间:2017-08-22 07:38:35

标签: c

在Debian 8的源代码/source/procps-3.3.9/lib/fileutils.c第38行是:     char const * write_error = _("写入错误");

我对_("写入错误")部分感到困惑。谷歌显示了变量命名约定或库保留名称的结果,但没有关于_在=的右侧和()引用字符串之前的结果。

我还把这一行放到一个最简单的测试程序中,因为只有有用的行才有编译失败的说法:

test.c:5:20: warning: implicit declaration of function ‘_’ [-Wimplicit-function-declaration]
    char const *str = _("test string");
                    ^

test.c:5:20: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
/tmp/cczQpqTh.o: In function `main':
test.c:(.text+0x15): undefined reference to `_'
collect2: error: ld returned 1 exit status

有谁知道_(" ")格式是什么意思?

1 个答案:

答案 0 :(得分:6)

这是使用免费软件翻译工具GNU gettext标记翻译字符串的标准方法。

The _() macro由外部工具找到,该工具提取文本以使其可翻译,以及(在运行时)执行查找以用必要的翻译替换文字。

名称_没有什么特别之处,它只是一个非常短但完全有效的C标识符。也许开始使用下划线的公共符号有点不确定,我现在不确定。

您得到的错误是因为您的测试程序很可能无法包含声明此宏的<libintl.h> header(当然是gettext的一部分)。因此,您可以按预期获得正常的“未定义引用”错误。