这在clang和gcc中没有警告地编译:
const char *foo = "\%";
结果字符串与"%"
相同。
这是什么逃脱的?我在哪里可以找到完整的逃生清单?
我想也许是为了逃避有向图,但其他有向字符会产生警告(例如"\:"
)。
感谢您的帮助!
答案 0 :(得分:7)
回答我自己的问题:支持SCCS,这是一个有40年历史的修订控制系统,甚至早于RCS。哈!
深入编译器,clang支持这个because it thinks gcc does:
'meta_query' => array(
array(
'key' => '_visibility',
'value' => array( 'catalog', 'visible' ),
'compare' => 'IN'
)
)
谎言!警告显示,但只有case '(': case '{': case '[': case '%':
// GCC accepts these as extensions. We warn about them as such though.
标志(在两个编译器中)。
哦,还有gcc?它supports the first three for emacs,我想这很容易混淆:
-pedantic
但最后一个:
/* `\(', etc, are used at beginning of line to avoid confusing Emacs. */
case '(':
case '{':
case '[':
SCCS支持!它是光荣的!
答案 1 :(得分:1)
根据C标准,标准未提及的任何转义序列都是语法错误。
这意味着编译器必须生成诊断,但编译器可以定义扩展(例如忽略\
)并继续编译程序的其余部分。
标准转义序列是:\' \" \? \\ \a \b \f \n \r \t \v
,以及分别由\
(数字),\x
和\u
引入的八进制,十六进制和通用字符常量。 / p>