C++ 如何跳过这些警告?C++;
新增代码:C++ 如何跳过这些警告?C++;,c++,trigraphs,C++,Trigraphs,新增代码: bool CHARACTER::SpamAllowBuf(const char *Message) { if (!strcmp(Message, "(?˛´c)") || !strcmp(Message, "(μ·)") || !strcmp(Message, "(±a≫Y)") || !strcmp(Message, "(AA??)") || !strcmp(Message, "(≫c¶?)") || !strcmp(Message, "(?đłe)") || !strcm
bool CHARACTER::SpamAllowBuf(const char *Message)
{
if (!strcmp(Message, "(?˛´c)") || !strcmp(Message, "(μ·)") || !strcmp(Message, "(±a≫Y)") || !strcmp(Message, "(AA??)") || !strcmp(Message, "(≫c¶?)") || !strcmp(Message, "(?đłe)") || !strcmp(Message, "(??C?)") || !strcmp(Message, "(????)") || !strcmp(Message, "(AE??)"))
{
return true;
}
return false;
}
警告包括:
char.cpp:7254:121: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7254:245: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7254:275: warning: trigraph ??) ignored, use -trigraphs to enable
如何跳过此警告?要回答您的问题,请使用
-Wno trigraphs
(如果使用gcc/clang)
<> P>但是根据C++的版本,你使用的三叉树仍然是标准的一部分。因此,像这样表达问号序列可以避免碰到三角图问题。编译器将看到一个字符串
“?”
三角图序列是以“?”
开头的任何字符序列;下一个字符决定序列的含义。Trigraph序列用于(或曾经用于)表示某些键盘上未提供的字符。因此,例如,“??=”
意味着#
三角图序列不再被广泛使用;我还没有检查过,但是它们可能已经被C++删除或完全删除。(感谢@johnathan指出它们在C++17中被删除)
在任何情况下,如果无法关闭该警告,则可以更改字符序列,使其在编译器看来相同,但不是trigraph。为此,请将其中一个?
字符更改为\?
。所以“??=”
将变成“?\?=”
;这不是三角图,因为它不是由字符“?”
后跟另一个字符组成的,但是一旦编译器处理了它,它就是两个问号后跟一个“=”
符号
重新排列带引号的字符串的另一种方法是将它们分开。所以
“??=”
将变成“??=”
或“?”?=”
;编译器将这些相邻的字符串文本连接起来,但是,同样,它们不是trigraphs序列,因为连接是在检查trigraphs之后发生的。这些警告非常有趣。添加了太多代码。有几项测试没有引起警告。正是以“?”开头的序列引入了三角图。我是否应该删除一些“?”你在使用什么编译器?你在使用哪个编译器?从c++17的标准中删除。@johnathan--谢谢。实际上,从编译器中删除它们的时间要长得多。我在80年代为Borland做的第一个项目之一是编写一个独立的预处理器来扩展Trigraph,因为他们的C编译器没有这样做。我记得这很常见。我使用了“\?”,现在编译时没有警告!Thanks@Pete贝克尔np。困扰编译器的那种挥之不去的向后兼容性最终消失了。那么你是在borland团队中移植到IBM机器的?这就是iirc的关键所在,也是为什么trigraphs一开始就被添加的原因。@johnathan--不,只是回应了一些用户投诉;有些人真的想用三角图。对源文件进行预处理比搞乱扫描仪的侵入性小。有时政治会影响设计决策。。。