关于C++:有没有用clang禁用三叉树的switch?

Is there a switch to disable trigraphs with clang?

我有一些(遗留的)代码是我第一次用clang构建的。代码类似于:

1
sprintf(buf,"%s <%s ????>", p1, p2);

clang给出以下警告(-Werror出错):

1
2
3
test.c:6:33: error: trigraph converted to '}' character [-Werror,-Wtrigraphs]
    sprintf(buf,"%s <%s ????>", p1, p2);
                           ^

很明显,??>并不是打算作为一个三段图,所以我想完全禁用三段图(源代码没有有意在任何地方使用它们)。

我试过-no-trigraphs,但这不是一个真正的选择:

1
clang: warning: argument unused during compilation: '-no-trigraphs'

我可以用-Wno-trigraphs关闭三角警告,但我不希望三角转换实际发生。

注意:使用-std=c89时,会产生意外的副作用。


尝试使用GNU*模式-"Trigraphs在GNU*模式下默认为关闭;它们可以通过-Trigraphs选项启用。"(有关其他差异和命令行开关,请参见http://clang.llvm.org/docs/usersmanual.html c_模式)


我看不到一个明显的方法来禁用三角图(而不是三角图警告)。修复此代码的最简单方法可能是将其更改为:

1
sprintf(buf,"%s <%s ????"">", p1, p2);