C语言进阶—— 接续符和转义符13

接续符的意义:

  • C语言中的接续符 (\) 是指示编译器行为的利器

我们来看一个案例:

1 1 #in\ 2 2 clud\ 3 3 e <st\ 4 4 dio.h> 5 5 6 6 in\ 7 7 t m\ 8 8 ain(\ 9 9 ) 1010 { 1111 pri\ 1212 ntf\ 1313 (\ 1414 "Hello bupi\n" 1515 )\ 1616 ; 1717 1818 ret\ 1919 urn 0; 2020 }

你一眼看过去可能会认为这个不像C语言的代码,但是他的确是的,只是大量使用了接续符,在现实中不用这样使用接续符,这只是一个例子。

有人或许会问,这样一段简单的程序使用接续符就变得这样的混乱,那我们还有必要去了解接续符吗?答案是要了解

改进前的代码:

1 1 #include <stdio.h> 2 2 3 3 #define SWAP(a,b) { int temp = a; a = b; b = temp; } 4 4 5 5 int main() 6 6 { 7 7 int a = 1; 8 8 int b = 2; 9 9 int c = 3; 1010 1111 SWAP(a,b); 1212 1313 printf("a = %d, b = %d\n", a, b); 1414 1515 SWAP(b,c); 1616 1717 printf("b = %d, c = %d\n", b, c); 1818 1919 return 0; 2020 }

 第三行是一个宏代码块,就是交换两个变量值,但是代码这样挤在一行,可读性并不好。

使用接续符改进后:

1 1 #include <stdio.h> 2 2 3 3 #define SWAP(a,b) \ 4 4 { \ 5 5 int temp = a; \ 6 6 a = b; \ 7 7 b = temp; \ 8 8 } 9 9 1010 int main() 1111 { 1212 int a = 1; 1313 int b = 2; 1414 int c = 3; 1515 1616 SWAP(a,b); 1717 1818 printf("a = %d, b = %d\n", a, b); 1919 2020 SWAP(b,c); 2121 2222 printf("b = %d, c = %d\n", b, c); 2323 2424 return 0; 2525 }

使用接续符改进后的宏代码块可读性大大增加了。

接续符的使用:

  •  编译器会将反斜杠剔除,跟在反斜杠后面的字符自动接续到前一行
  • 在接续单词时,反斜杠之后不能有空格,反斜杠的下一行也不能有空格
  • 接续符适合在定义宏代码块时使用

转义符的意义:C语言的转义符 (\) 主要用于表示无回显示符,也可以表示常规字符

  •   \n  回车换行 (本义是光标往下一行)
  •   \t  横向跳到下一制表位
  •   \v  竖向跳格
  •   \b  退格
  •   \r  回车(本义是光标重新回到本行开头)
  •   \f  走纸换行
  •   \\  反斜杠符   \
  •   \'  单引号符
  •   \a  鸣铃
  •   \ddd  一至三位八进制数代表的字符
  •   \xhh  一至两位十六进制数所代表的字符

转移符的使用:当反斜杠 (\) 作为转移符使用时必须出现在单引号或者双引号之间

案例:

1 1 #include <stdio.h> 2 2 3 3 int main() 4 4 { 5 5 char enter = '\n'; 6 6 7 7 char* p = "\141\t\x62"; 8 8 9 9 printf("%s", p); 1010 printf("%c", enter); 1111 1212 return 0; 1313 }

 小结:

  • C语言的反斜杠同时具有接续符和转移符的作用
  • 作为接续符使用的时候可直接出现在程序中
  • 作为转移符使用的时需出现在单引号或者双引号之间
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

C# Aspose.Cells导出xlsx格式Excel,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”

报错信息:最近打开下载的Excel,会报如下错误。(xls格式不受影响)!(https://oscimg.oschina.net/oscnet/2b6f0c8d7f97368d095d9f0c96bcb36d410.png)!(https://oscimg.oschina.net/oscnet/fe1a8000d00cec3c

Linux查看GPU信息和使用情况

1、Linux查看显卡信息:lspci|grepivga2、使用nvidiaGPU可以:lspci|grepinvidia!(https://oscimg.oschina.net/oscnet/36e7c7382fa9fe49068e7e5f8825bc67a17.png)前边的序号"00:0f.0"是显卡的代

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid