在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
有谁知道_(" ")
格式是什么意思?
答案 0 :(得分:6)
这是使用免费软件翻译工具GNU gettext标记翻译字符串的标准方法。
The _()
macro由外部工具找到,该工具提取文本以使其可翻译,以及(在运行时)执行查找以用必要的翻译替换文字。
名称_
没有什么特别之处,它只是一个非常短但完全有效的C标识符。也许开始使用下划线的公共符号有点不确定,我现在不确定。
您得到的错误是因为您的测试程序很可能无法包含声明此宏的<libintl.h>
header(当然是gettext的一部分)。因此,您可以按预期获得正常的“未定义引用”错误。