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

Gre*_*ill 10 c++ clang trigraphs

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

sprintf(buf, "%s <%s ????>", p1, p2);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

clang: warning: argument unused during compilation: '-no-trigraphs'
Run Code Online (Sandbox Code Playgroud)

我可以关闭三元组警告,-Wno-trigraphs但我不希望实际发生三元组转换.

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

yac*_*oor 6

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

  • 有没有办法禁用三元组而不启用gnu扩展? (2认同)