三字符序列 ??/ 被忽略了,使用 -trigraphs 以启用。

17

我的编译器(gcc)给了我这个警告。请帮助我理解它的含义:

警告:三字符组 ??/ 被忽略,使用 -trigraphs 以启用

该警告意味着编译器已经忽略了包含两个问号和一个斜杠的三字符序列“??/”。如果你确实需要使用三字符序列,请使用编译选项“-trigraphs”来启用它们。


"??/"是反斜杠的等价物,您可以将三连符替换为 ""。 - Eric Fortis
1
除非你在主机3270终端上编辑C代码等,否则为了谨慎起见,将"??"写成"?\?"是一个“好主意”。(一些字符,如{} [] \,在许多主机字符集以及其他系统的某些非英语键盘中不存在。) - BRPocock
3
C语言中尘封已久的角落再次显现... - tdenniston
2个回答

18

你在源代码中“不小心”写了一个三问号序列(编译器的警告会指示该行)。由于三问号序列是为解决现代系统中不存在的问题而发明的,因此您实际上不希望将三问号序列??/替换为字符\

因此,这个警告可能应该被忽略(您可以告诉编译器在命令行中添加-Wno-trigraphs-Wall之后以让编译器保持安静;参见文档)。但最好展示一下您的源代码,以便我们确认。


16

不需要添加编译器标志,你只需使用\转义每个问号,如\?\?-。在我的情况下,这很有帮助。


2
编译器标志用于处理你无意中写了三字符组合的情况,这样编译器就不会对此发出警告。如果你在编写时知道这是一个意外的三字符组合,那么你可以像你建议的那样进行转义,而不需要使用编译器标志。 - j_kubik

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