【C语言进阶剖析】13.C语言中的接续符和转义符
文章目录
一、接续符的意义
二、接续符的使用
三、转义符的意义
四、转义符的使用
五、转义符和其他的语法混合
六、小结
一、接续符的意义
- C语言中的接续符(\)是指示编译器行为的利器
下面看一段接续符的代码(代码1-1):
#in\
clud\
e <st\
dio.h>in\
t m\
ain(\
)
{
pri\
ntf\(\"Hello AutumnZe.\n")\;ret\
urn 0;
}
可以看到上述代码写的很凌乱,但是可以正常编译运行,如下:
二、接续符的使用
- 编译器会将反斜杠剔除,跟在反斜杠后面的字符自动接续到前一行
- 在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格
- 接续符适合在定义宏代码块时使用
所以说代码1-1可以写成:
#include <stdio.h>int main()
{
printf ( "Hello AutumnZe.\n") ;return 0;
}
下面看一个接续符的应用程序:
#include<stdio.h>#define SWAP(a,b) \
{ \int temp = a; \a = b; \b = temp; \
}int main()
{int a = 1;int b = 2;int c = 3;SWAP(a,b);printf("a = %d, b = %d\n", a, b);SWAP(b,c);printf("b = %d, c = %d\n", b, c);return 0;
}
可以看到,通过接续符来进行宏定义,代码看起来非常优美。下面为输出结果:
三、转义符的意义
- C语言中的转义符(\)主要用于表示无回显字符,也可用于表示常规字符
\n | 回车换行 |
\t | 横向跳到下—制表位置 |
\v | 竖向跳格 |
\b | 退格 |
\r | 回车 |
\f | 走纸换页 |
\\ | 反斜杠符"\" |
\' | 单引号符 |
\a | 鸣铃 |
\ddd | 1~3位八进制数所代表的字符 |
\xhh | 1~2位十六进制数所代表的字符 |
四、转义符的使用
- 当反斜杠(\)作为转义符使用时必须出现在单引号或者双引号之间
如下:
下面看一段转义字符的使用示例:
#include <stdio.h>int main()
{char enter = '\n';char* p = "\141\t\x62";printf("%s", p);printf("%c", enter);return 0;
}
141 的十进制表示为 97, 0x62 的十进制表示为 98,所以打印出来的结果如下:
五、转义符和其他的语法混合
- 奖项:Best of Show
- 功能:处理三种文件格式(PGM、PPM和ASCII Art)的降采样工具,降低文件分辨率
- 作者:Google 华裔工程师 Don Hsi-Yun Yang
下面是源码,看起来像一个小女孩的脸:
/*++++[ >i>n[t*/ #include<stdio.h>/*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1;*/int/**/main(int/**/n,char**m){FILE*p,*q;int A,k,a,r,i/*#uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/;char*d="P%" "d\n%d\40%d"/**/"\n%d\n\00wb+",b[1024],y[]="yuriyurarararayuruyuri*daijiken**akkari~n**""/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*=""yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?""*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni("/***/"i+k[>+b+i>++b++>l[rb";int/**/u;for(i=0;i<101;i++)y[i*2]^="~hktrvg~dmG*eoa+%squ#l2"":(wn\"1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne\"gt\"yogYURUYURI"[i]^y[i*2+1]^4;/*!*/p=(n>1&&(m[1][0]-'-'||m[1][1] !='\0'))?fopen(m[1],y+298):stdin;/*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m] =<2<5<64;}-]-(m+;yry[rm*])/[**/q=(n<3||!(m[2][0]-'-'||m[2][1]))?stdout /*]{ }[*/:fopen(m[2],d+14);if(!p||/*"]<<*-]>y++>u>>+r >+u+++y>--u---r>++i+++" <)< ;[>-m-.>a-.-i.++n.>[(w)*/!q/**/)return+printf("Can " "not\x20open\40%s\40" "" "for\40%sing\n",m[!p?1:2],!p?/*o=82]5<<+(+3+1+&.(+ m +-+1.)<)<|<|.6>4>-+(> m- &-1.9-2-)-|-|.28>-w-?-m.:>([28+*/"read":"writ");for ( a=k=u= 0;y[u]; u=2 +u){y[k++ ]=y[u];}if((a=fread(b,1,1024/*
,mY/R*Y"R*/,p/*U*/)/* R*/ )>/*U{ */ 2&& b/*Y*/[0]/*U*/=='P' &&4==/*"y*r/y)r\}
*/sscanf(b,d,&k,& A,& i, &r)&& ! (k-6&&k -5)&&r==255){u=A;if(n>3){/*
]&<1<6<?<m.-+1>3> +:+ .1>3+++ . -m-) -;.u+=++.1<0< <; f<o<r<(.;<([m(=)/8*/
u++;i++;}fprintf (q, d,k, u >>1,i>>1,r);u = k-5?8:4;k=3;}else/*]>*/{(u)=/*{ p> >u >t>-]s >++(.yryr*/+( n+14>17)?8/4:8*5/4;}for(r=i=0 ; ;){u*=6;u+= (n>3?1:0);if (y[u]&01)fputc(/*<g-e<t.c>h.a r -(-).)8+<1. >;+i.(<)< <)+{+i.f>([180*/1*(r),q);if(y[u ]&16)k=A;if (y[u]&2)k--;if(i/*("^w^NAMORI; { I*/==a/*" )*/){/**/i=a=(u)*11&255;if(1&&0>= (a= fread(b,1,1024,p))&&")]i>(w)-;} { /i-f-(-m--M1-0.)<{"[ 8]==59/* */ )break;i=0;}r=b[i++];u+=(/**>> *..</<<<)<[[;]**/+8&*(y+u))?(10- r?4:2):(y[u] &4)?(k?2:4):2;u=y[u/*49;7i\(w)/;} y}ru\=*ri[ ,mc]o;n}trientuu ren (*/]-(int)'`';} fclose( p);k= +fclose( q);/*] <*.na/m*o{ri{ d;^w^;} }^_^}}" */ return k- -1+ /*\' '-`*/( -/*}/ */0x01 ); {;{ }}; /*^w^*/ ;}
下面为输出结果:
六、小结
- C语言中的反斜杠 (\) 同时具有接续符和转义符的作用
- 作为接续符使用时可直接出现在程序中
- 作为转义符使用时需出现在单引号或双引号之间
【C语言进阶剖析】13.C语言中的接续符和转义符相关推荐
- C语言进阶剖析 13 接续符和转义符
接续符的意义 C 语言中的接续符 ->是指示编译器行为的利器 实例分析: 初探接续符 #in\ clud\ e <st\ dio.h>in\ t m\ ain(\ ) {pri\ n ...
- 《C语言进阶剖析》1.C语言开发环境搭建与入门
一.<第12课 - 注释符号> 本课程总结自狄泰软件学院唐佐林老师的<C语言进阶剖析>课程,本课程实用性较强,在此推荐给想深入学习C语言的同学! 1. 下面的注释正确吗? 在现 ...
- c语言深度剖析 视频,[C语言] C语言高手班 深度剖析视频教程 两期完整版
资源介绍 C语言高手班 深度剖析视频教程 推荐具有比较好的C语言基础的朋友再来进行学习,不是说初学者一定学不了 但是在编程开发这类教程上面,还是一定要踏踏实实的才行! 视频目录及截图: xa0xa0第 ...
- C语言——深度剖析数据在内存中的存储
大家好!我是保护小周ღ,本期为大家带来的是深度剖析数据在内存中的存储,不知道,大家学了这么久C语言,有没有想过一个问题,我们在程序设计中的数据是怎么在计算机中存储的?我们都知道 一个整型数据 int ...
- C语言—深度剖析数据在内存中的存储
深度剖析数据在内存中的存储 数据类型介绍 类型的基本归类 整形在内存中的存储 大小端介绍 整形在内存中的存储的相关练习 浮点型在内存中的存储 浮点型在内存中的存储相关介绍 数据类型介绍 内置类型(C语 ...
- 【Go语言实战】13. Go语言context标准库(下)
13. Go语言context标准库(下) 1. API函数 2. 辅助函数 3. context的用法 4. 使用context传递数据真的那么好吗? 参考资料 接着上一届,我们继续学习Go语言的C ...
- 常用HTML转义字符,html转义符,JavaScript转义符,html转义字符表,HTML语言特殊字符对照表(ISO Latin-1字符集)...
HTML字符实体(Character Entities),转义字符串(Escape Sequence) 为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,> ...
- 【C语言进阶剖析】14.C语言中的单引号和双引号
文章目录 一.单引号和双引号 二.小贴士 三.程序实例分析1 四.程序实例分析2 五.容易混淆的代码 六.小结 一.单引号和双引号 C语言中的单引号用来表示字符字面量 C语言中的双引号用来表示字符串字 ...
- C语言 深度剖析数据在内存中的存储(2)
本次博客是继上次博客,继续向下剖析数据在内存当中的存储. 练习 浮点型在内存中的存储 练习 代码1: int main() {char a= -1;signed char b=-1;unsigned ...
最新文章
- 提气!清华成立集成电路学院,专研“卡脖子”技术
- vue路由history模式,nginx配置
- JVM1.6 GC详解
- 帮助方老师使用固态硬盘安装win10,赚了150软妹币(但是他赖账了!)
- 《软件工程》实验报告——软件设计
- 用于matplotlib对齐很有用的算法,可用于面试笔试
- vba 保存word里面的图片_笔记7 【office精华课】一套课程学会Word+Excel+PPT(一)【Word】(2020年第37周 周五)...
- 如何用MobaXterm查看日志信息以及xml
- VirtualBox基础使用
- linux 内核udp编程,Linux下网络编程实现UDP,还有大量实例
- 管理之道(七) - 不可奖励员工错误的行为
- Android_获取屏幕大小的两种方法
- SAP Open SQL
- 诀窍|Callnovo助中国电动自行车成为大洋彼岸街头美丽风景线
- DHCP server和DHCP relay配置
- 最炫表白网站html5源码_七夕程序员的十款表白源码_html+css+js
- voc旋转标注数据转dota类型
- 苹果退款_苹果退款流程最新苹果内购退款流程和教程
- Unity关于程序集(Assembly )的那些事
- 众里寻她千百度,那人却在优衣库。
热门文章
- Unity模型导入自动导入材质贴图
- KOF系列全人物第一时间不可防御技研究报告汇总引索贴
- 全网最详细解法----leetCode-17--电话号码的字母组合,Java入门你值得拥有
- |sex[]_sum[],G_ans|L2-028 秀恩爱分得快
- 苏格拉底与商鞅的生死异同
- Vmware ESX 5.0 安装与部署
- wordpress建站(空间+域名+备案)
- 求QQ自动登录解决方案
- CSS 用浮动制作一个导航栏
- Nature:Adversarial explanations for understanding image classification decisions and improved