如何在 CWEB 中提及按位或运算符?

如何在 CWEB 中提及按位或运算符?

在编写 CWEB 程序时,我想写这样的评论:

@ 如果指定了选项 \.{-a},则输出文件需要在
仅附加模式。我们的程序还应该创建输出文件,因此带有
我们打开输出文件是 |O_RDONLY|O_CREAT|O_APPEND| 或
|O_RDONLY|O_CREAT| 如上所述。

似乎 CWEB 不喜欢|在内部 C 上下文中提及按位或运算符。有没有办法在 TeX 部分中提及按位或运算符,而无需手动重建 CWEAVE 的输出?

答案1

我在给 Donald Knuth 的一封信中提出了以下问题:

最后,我开始在一个项目中使用您的 CWEB 系统,以了解文学编程是否是一种适合我的风格。到目前为止,我非常喜欢它!我遇到的唯一问题是我还没有找到一种方法来在 c 部分中提及按位或运算符 |。是否有特殊语法,或者我必须使用@t 的临时技巧?

他给出了这样的答案:

令人惊奇的是 - 在编写了数千个程序(其中超过 100 个肯定使用了按位或)之后 - 我从未觉得需要在注释中使用这个运算符!(我在 plain.tex 中确实定义了 \vert,因此在数学中不需要 |。)

在 ctangle/cweave 中,确实没有办法“欺骗”解析器,因此不能指望只输入包含“|”字符的任何 C 代码。[这意味着 || 也是有问题的]。如果我想在 TEX 代码中使用“x|y”,我的自然倾向是使用 cwebmac.tex 中的 \OR 的 $|x|\OR|Y|$。[实际上我在 TAOCP 中使用不同的间距……

bitwise AND is \mathchardef\band="2026  
        OR     \def\bor{\mathbin{\kern1mu\vert\kern1mu}}  

但在 cwebmac 中 \OR = \mid]。

如果你更经常或在相当普遍的情况下需要它,我能想到的最好的解决办法是替换其他你没有使用的二元运算符,让 TEX 进行切换:

\def\bitor#1!{\begingroup\let\MOD=\OR#1\endgroup}
Look at |x%y| and \bitor|x%y|! for example.

结果是

看着XX|例如。

相关内容