有没有用clang禁用三字符的开关?

时间:2012-02-21 23:53:03

标签: c++ clang trigraphs

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

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

Clang发出以下警告(-Werror错误):

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

显然??>并不是三元组,所以我想完全禁用三元组(源不会故意在任何地方使用它们。)

我尝试了-no-trigraphs,但这不是一个选择:

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

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

注意:Trigraphs被启用为使用-std=c89的意外副作用。

2 个答案:

答案 0 :(得分:6)

尝试使用gnu *模式 - “Trigraphs默认在gnu *模式下关闭;它们可以通过-trigraphs选项启用。” (有关其他差异和命令行开关,请参阅http://clang.llvm.org/docs/UsersManual.html#c_modes

答案 1 :(得分:4)

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

sprintf(buf, "%s <%s ????"">", p1, p2);
相关问题