C语言中的??(??)在iSeries表示什么?

4

我被指派将一个运行在 iSeries/AS400 系统上的 C 语言程序转换成 .NET。由于我已经有一段时间没有使用 C 语言了,而且我之前从来没有在 iSeries 上使用过 C 语言。我看到了一些这样的东西:

main(int argc, char *argv ??(??))

我不确定这里的 ?? 是什么意思。根据这个用法,我猜想它是用于数组,但在我走错路之前,我想确保一下。


4
请参考http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C。 - StephenTG
3
这是三字符组。??( 等同于 [??) 等同于 ] - johnchen902
4
我在想,那个最初写下这段话的人对他们的继任者有什么怨恨... - StephenTG
2
可能是未知元字符在C/C++字符串字面值中?的重复问题。 - alk
2
三字符是来自于一个时代,当时有很多键盘没有一些字符(在这种情况下是方括号)。我猜测这段代码是从某个旧系统移植到AS/400上的,三字符是遗留下来的。您应该能够创建一些正则表达式,在项目中全局替换它们。 - Speed8ump
显示剩余2条评论
2个回答

7

??( 相当于 [??) 相当于 ]。它们被称为三字符序列,在对代码进行任何其他处理之前,它们将由预处理器替换。此处有其他三字符序列的列表


1
有一个有趣的故事: 我之所以知道这个答案,是因为我在编辑某人的代码时发现他们的注释拼写错误,于是我在Meta上提出了这个问题:http://meta.stackexchange.com/questions/191267/is-it-ok-to-edit-comments-in-code。 - StephenTG

3
这叫做“三字符组合”,与IT技术有关。根据C11(ISO/IEC 9899:201x)§5.2.1.1的规定,在进行任何其他处理之前,将每个由三个字符组成的序列(称为三字符序列17)替换为相应的单个字符。请参考以下内容:

三字符组合

在进行任何其他处理之前,将每个由三个字符组成的序列(称为三字符序列17)替换为相应的单个字符。

??=    #
??(    [
??/    \
??)    ]
??'    ^
??<    {
??!    |
??>    }
??-    ~

所以这段代码
main(int argc, char *argv ??(??))

转变为
main(int argc, char *argv [])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接