免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3189 | 回复: 12
打印 上一主题 下一主题

转义字符\?为何而生 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-22 20:49 |只看该作者 |倒序浏览
感觉完全没有必要啊?

?难道还有什么特殊用处吗?还需要转义?

论坛徽章:
0
2 [报告]
发表于 2010-08-22 22:14 |只看该作者
如果在字符串字面值中要表示问号,既可以使用转义序列\?,也可以直接用字符? 但是有个三目运算符 test? a:b, 是为了区别这个?

论坛徽章:
0
3 [报告]
发表于 2010-08-22 22:32 |只看该作者
“test?a:b”

完全没有问题啊~

论坛徽章:
0
4 [报告]
发表于 2010-08-22 22:47 |只看该作者
ISO99这样写的 ,也没提,
The double-quote " and question-mark ? are representable either by themselves or by the escape sequences \" and \?, respectively, but the single-quote ' and the backslash \
shall be represented, respectively, by the escape sequences \' and \\.

论坛徽章:
0
5 [报告]
发表于 2010-08-23 09:10 |只看该作者
主要是为了在某些极端的情况下和三字符组区分
例如你想输出"??!" 但是这是个三字符组表示字符'|',所以可以这样写"\?\?!"就不会混淆了

论坛徽章:
0
6 [报告]
发表于 2010-08-23 09:13 |只看该作者
我觉得~

在很久很久以前,"?"有种特殊含义,因此语言设计者才会把设计"\?"这个转义字符

但不知道究竟是啥含义,纠结啊~

论坛徽章:
3
白羊座
日期:2013-11-05 12:59:14子鼠
日期:2014-01-29 14:14:50戌狗
日期:2014-02-11 16:21:45
7 [报告]
发表于 2010-08-23 09:15 |只看该作者
本帖最后由 ahocat 于 2010-08-23 09:30 编辑

5楼正解。
在C诞生的年代键盘还没统一标准,有些系统上的键盘缺少一些符号,需要用??来代替的。

三字符组:
??( 代表 [
??) 代表 ]
??< 代表 {
??> 代表 }
??= 代表 #
??/ 代表 \
??! 代表 |
??' 代表 ^
??- 代表 ~

另外还有双字符组:
<: 代表 [
:> 代表 ]
<% 代表 {
%> 代表 }
%: 代表 #

论坛徽章:
0
8 [报告]
发表于 2010-08-23 09:18 |只看该作者
本帖最后由 zhangsuozhu 于 2010-08-23 09:56 编辑

Trigraphs

??= #
??( [
??/ \
??) ]
??’ ^
??< {
??!  |
??> }
??-  ~

  1. /* test.c */
  2. int main()??<
  3. printf("??!") ;
  4. printf("%d" ,  1 ??' 0) ;
  5. return 0 ;
  6. ??>
复制代码
gcc -trigraphs test.c
./a.out

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
9 [报告]
发表于 2010-08-23 09:38 |只看该作者
\r到底是哪个键啊.

论坛徽章:
0
10 [报告]
发表于 2010-08-23 09:41 |只看该作者
回复 8# zhangsuozhu
呵呵,??'最后一个字符写成全角的了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP