C语言 详细讲解接续符和转义符的使用

 更新时间:2022年04月19日 16:31:22   作者:清风自在 流水潺潺  
接续符是用来告诉编译器行为的符号,那编译器遇到接续符是什么行为呢,就是去掉接续符,然后把下一行连接到现在这行上面,转义符是主要用于表示无回显字符,也用于表示常规字符,转义符必须放在单引号或者双引号里面

一、接续符的意义

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鸣铃
\ddd1~3位八进制数所代表的字符
\xhh1~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语言 详细讲解接续符和转义符的使用的文章就介绍到这了,更多相关C语言 接续符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言之实现辗转相除法的两种方式

    C语言之实现辗转相除法的两种方式

    这篇文章主要介绍了C语言之实现辗转相除法的两种方式,具有很好的参考价值,希望对大家有所帮助,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Lua和C/C++互相调用实例分析

    Lua和C/C++互相调用实例分析

    今天小编就为大家分享一篇关于Lua和C/C++互相调用实例分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 一文掌握scanf的用法实例小结

    一文掌握scanf的用法实例小结

    scanf的基本用法除了常规的输入操作外还有一些特殊的用法,使用这些用法可以很方便的在输入中读取想要的数据,这篇文章主要介绍了scanf的用法,需要的朋友可以参考下
    2023-12-12
  • C++实现特殊矩阵的压缩存储算法

    C++实现特殊矩阵的压缩存储算法

    在实际存储时,会发现矩阵中有许多值相同的数据或有许多零数据,且分布呈现出一定的规律,称这类型的矩阵为特殊矩阵。本文将利用C++实现特殊矩阵的压缩存储,感兴趣的可以了解一下
    2022-08-08
  • 详解C语言内核中的链表与结构体

    详解C语言内核中的链表与结构体

    Windows内核中是无法使用vector容器等数据结构的,当我们需要保存一个结构体数组时,就需要使用内核中提供的专用链表结构。本文分享了几个内核中使用链表存储多个结构体的通用案例,希望对你有所帮助
    2022-09-09
  • C/C++详解实现二层转发

    C/C++详解实现二层转发

    数据链路层是开放系统互连 (OSI) 模型中的第二层,该层用于通过 LAN 等单一网络进行通信的节点,第二层数据包不能从一个网络传输到另一个网络。而二层转发是根据报文的目的MAC直接进行转发,转发过程中不用对报文的头部做任何的修改
    2022-05-05
  • C语言交换奇偶位与offsetof宏的实现方法

    C语言交换奇偶位与offsetof宏的实现方法

    offsetof()是C自带的一个宏,它的作用就是计算结构体成员相对于首地址处的偏移量,下面这篇文章主要给大家介绍了关于C语言交换奇偶位与offsetof宏的实现方法,需要的朋友可以参考下
    2023-02-02
  • C语言实现二叉树的示例详解

    C语言实现二叉树的示例详解

    这篇文章主要为大家详细介绍了C语言中二叉树的算法实现以及二叉树的遍历算法与应用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-06-06
  • php正则表达式的基本语法总结

    php正则表达式的基本语法总结

    以下是对php正则表达式的基本语法进行了详细的总结介绍,需要的朋友可以过来参考下
    2013-10-10
  • c语言算术运算符越界问题解决方案

    c语言算术运算符越界问题解决方案

    大量的安全漏洞是由于计算机算术运算的微妙细节引起的, 具体的C语言, 诸如符号数和无符号数之间转换, 算术运算的越界都会导致不可预知的错误和安全漏洞, 具体的案例数不胜数.
    2012-11-11

最新评论