c++ - 是否有一个开关可以用 clang 禁用三字母?

标签 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 关闭三字母警告,但我根本不希望三字母转换真正发生。

注意:启用三字母是使用 -std=c89 的意外副作用。

最佳答案

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

关于c++ - 是否有一个开关可以用 clang 禁用三字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9387166/

相关文章:

c++ - 默认构造函数和析构函数的 "=default"与 "{}"有何不同?

c++ - 引用函数 "int &foo();"是如何工作的?

c - LLVM libFuzzer rss 内存增加

c++ - 警告 : disabled expansion of recursive macro

c - 什么??!??!运算符在 C 中做什么?

c++ - 如何将对象数组作为参数传递给模板

c++ - 我的代码的 Boost 更新问题

c++ - 为什么 lambda 在 clang 而不是 gcc 上崩溃?

c++ - 为什么 boost 正则表达式 '.{2}' 不匹配 '??'

postgresql - 建议像谷歌一样使用 postgresql trigrams 和全文搜索