C 中 char foo(|10|) 的含义是什么?

gbr*_*ner 99 c mainframe ebcdic zos

我是一位非常有经验的 C 程序员,但最近我在大型机上遇到了一些具有局部变量的代码。这是在一个简单的 C 函数中声明此变量,然后strcpystrcat两个字符串放入其中,然后尝试使用fopen.

char foo(|10|);
Run Code Online (Sandbox Code Playgroud)

这段代码很旧了。甚至可能是 K&R C 旧的。我想知道这是否是一些晦涩的编译器扩展或对没有 [] 或类似内容的键盘的适应。

有人知道这个声明是否“特殊”吗?

这是一个标准的 Z/OS 大型机。我不确定使用什么编译器。

Nat*_*dge 108

它似乎是有向字母的早期或非标准形式。该代码可能是使用EBCDIC而不是 ASCII 编写的,并且 EBCDIC 没有[ ]字符(至少不是在所有代码页中)。

我找到了SAS/C 的手册,这是一个显然适用于 System/370 的 C 编译器。在第 2-10 页(pdf 第 42 页)上,您可以看到它们(| |)列为[ ].

(虽然显然|也不在所有代码页中;但也许它在更常用的代码页中?我不知道。)

C99 还包含二字母(和三字母)来解决相同的问题,但它们用作<: :>二字母和??( ??)三字母。

  • 这似乎是正确的。搜索谷歌图书后发现了*博士的几乎难以阅读的片段。1993 年的 Dobb's Journal* 指出 MVS EBCDIC 不支持“[”和“]”,而是使用二合字母“(|”和“|)”。 (12认同)
  • 但是@dan04这个问题是关于C语言的,而不是C++。 (5认同)
  • C95 (ISO 9899/AMD1:1995) 中的标准 C 添加了有向图。 (4认同)
  • 谢谢——这是来自 ebcdic 字符集大型机。我听说过三字母(并检查过!),但以前从未听说过 C 代码中的二字母! (2认同)