为什么在评论中使用“代码”来包含代码?

Why use `code' for embracing code in a comment?

我刚刚阅读了一些 glibc 2.22 源代码(源文件位于 /sysdeps/posix/readdir.c)并看到了这条评论:

/* The only version of `struct dirent*' that lacks `d_reclen' is fixed-size.  */

(已删除换行符。)

类型和标识符的奇怪强调让我很烦。为什么不只使用单引号或 des accents graves?这背后有什么具体原因吗?会不会是某种字符集转换错误?
我也搜索了 glibc style guide 但没有在评论中找到任何关于代码格式的内容。

这可以追溯到早期的计算机字体,其中反引号和撇号显示为镜像。事实上,ASCII 标准的早期版本支持这种用法。

转述自 RFC 20,比 USAS X3.4-1968:

这样的实际标准更容易理解
Column/Row  Symbol      Name
2/7         '           Apostrophe (Closing Single Quotation Mark Acute Accent)
6/0         `           Grave Accent (Opening Single Quotation Mark)

这种传统也可以在 troffm4TeX 等工具中看到,它们最初也使用这种引用风格。

请注意,从语法上讲,使用不同的开始和结束标记有一个好处:它们可以正确嵌套。

惯例。

您肯定知道,C 编译器会忽略注释。它们没有区别,但写该评论的开发人员可能更喜欢它们的外观而不是普通的单引号。

ASCII

在源代码中使用 non-ASCII 字符 (unicode) 是一种相对较新的做法(当涉及 English-authored 源代码时更是如此),并且在许多编程语言实现中仍然存在兼容性问题。 program input/output 中的 Unicode 完全是另一回事(而且也不完美)。在程序 源代码中, unicode 字符仍然很不常见,我怀疑我们会在一段时间内看到它们在像 POSIX 头文件这样的旧代码中大量出现, 还.

源代码过滤器

有一些源代码过滤器,例如 well-known Javadoc 之类的文档生成包,它们会查找特定的评论字符串,例如 /** 以打开评论。这些程序中的一些 可能 特殊对待您的“引用字符串”,但该引用约定比大多数(所有?)可能给予它们特殊处理的源代码过滤器更旧,所以这可能是不是。

命令替换的反引号

在许多脚本语言(以及 StackExchange markdown!)中有一个强有力的约定,即使用反引号 (``) 来执行命令并包含输出,例如在shell 个脚本:

echo "The current directory is `pwd`"

这会输出如下内容:

The current directory is /home/type_outcast

这可能是约定背后的部分原因,但我相信 Cristoph 也有观点,关于平衡引号,类似于正确排版的开始和结束引号。

所以,再说一遍,一句话:'约定'。