12

我有一些(遗留)代码,我是第一次用 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.

4

2 回答 2

8

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

于 2012-02-22T00:06:19.450 回答
4

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

sprintf(buf, "%s <%s ????"">", p1, p2);
于 2012-02-21T23:59:36.817 回答