龙空技术网

C语言学习第13篇---注释符号/持续符/转义符 剖析

CodeAllen嵌入式 223

前言:

目前你们对“c语言的注释作用”大致比较关注,咱们都想要分析一些“c语言的注释作用”的相关内容。那么小编也在网络上搜集了一些对于“c语言的注释作用””的相关内容,希望我们能喜欢,小伙伴们快快来了解一下吧!

原文首发于同名微信公号「Allen5G」,欢迎大家搜索关注,欢迎转发!

身为程序员经常需要看代码,相信大家都遇到过令人烦躁的注释

正确,准确的注释至关重要!!!

实验1:初探注释准则

#include <stdio.h>int main(){ int/*...*/i; char* s = "abcdefgh //hijklmn";  //Is it a \ valid comment?  in/*...*/t i;  return 0;}

基本的注释规则:

编译器在编译过程中使用空格替换整个注释

字符串字面量中的// 和 /* ... */ 不代表注释符号

/* ... */ 型注释不能被嵌套

一个有趣小例子:

y = x/*p 是什么意思?本意:把 x 除以 *p 的结果赋值给 y编译器:将 /* 作为一段注释的开始,把 /* 后的内容都当成注释内容,直达 */ 出现为止 在编译器看来,注释和其他程序元素是平等的,因此,作为工程师不能轻视注释

注释的基本原则:

注释应该准备易懂,防止二义性,错误的注释无害无利。

注释是对代码的提示,避免臃肿和喧宾夺主

一目了然的代码避免加注释

不要用缩写来注释代码,这样可能会产生误解

注释用来阐述原因和意图而不是描述程序的运行过程

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

试验一:接续符

#in\clud\e <st\dio.h> in\t m\ain(\){pri\ntf\ (\ "Hello D.T.\n" )\ ; ret\urn 0;} 

持续符的使用:

编译器会将反斜杠剔除,跟在反斜杠后面的字符自动持续到前一行

在接续单词是,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格

持续符适合在定义宏代码块的时候使用

实验2:接续符的应用

#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语言中的转移符(\)主要用于表示无回显字符,也可以用于表示常规字符

转义符的使用:

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

char enter = '\n';char* p = "\123\t\456";

实验3:转义字符使用实例

#include <stdio.h> int main(){ char enter = '\n';  char* p = "\141\t\x62";  printf("%s", p); printf("%c", enter);  return 0;} 

举个大神的例子:这个是获奖的作品,有实际意义,将C语言中的语法用到了极致

 /* + + + + [ >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语言空格转义符