C中的反斜杠百分比是什么?

时间:2015-12-07 20:34:06

标签: c gcc

这在clang和gcc中没有警告地编译:

const char *foo = "\%";

结果字符串与"%"相同。

这是什么逃脱的?我在哪里可以找到完整的逃生清单?

我想也许是为了逃避有向图,但其他有向字符会产生警告(例如"\:")。

感谢您的帮助!

2 个答案:

答案 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>