关于C编程过程中应该注意的事项(书写习惯以及快捷键使用)最后说一个必需用到的快捷键:Ctrl+s保存,一定要形成习惯,写完一段就保存.代码风格是一个很个性化的东西,每个人都会有自己的喜好和见解。这里列出的是我个人的风格,并且是一般的代码风格。所谓一般是指文中没有对标识符的命名有太多的规定,如全局变量、局部变量、宏等。相关规则一般在具体的项目中给出,不同的项目可以有不同的命名规则。屏幕空间:这里基于标准的UNIX终端(Terminal)来定义屏幕的大小,宽度为80个字符,高度为24或25行。1缩进1.1基本规则使用8字符宽度的tab来控制缩进。除了注释,空格从来不用于缩进;相应的,tab只用于缩进,不用于其他场合。缩进(indentation)的目的是为了清楚的表现一个逻辑块的开始和结束,使用8字符这样的大缩进可以表现得更明显。关于缩进的风格有很多,其中反对tab的不在少数。反对的理由之一是tab在不同的系统和编辑器上可能有不同的定义,从而导致本来很规整的代码在别的系统上显示错位。这确实是一个问题,所以,开始之前,请确认使用的编辑器将tab设置等于8字符宽度。反对使用8字符tab的另一理由是,当缩进层次太多时,代码向屏幕右侧跑得太快,导致跨行代码增多,难于阅读。确实,在一些复杂的商业逻辑中,缩进层次可能很多。对此这里引用LinuxKernel代码风格中的一个解释:如果你的代码有超过3层的缩进,那么你需要重新设计你的程序。要做到这点不容易,尤其当程序员水平有限,或者项目紧急,没有时间来优化代码。此时使用别的缩进方案(如4空格缩进)可能是一个折中的方案。1.2基本形式以if语句为例:if(mapping)spin_lock(&mapping->i_shared_lock);不要写在一行上:if(mapping)spin_lock(&mapping->i_shared_lock);类型定义:structnlmsgerr{interror;structnlmsghdrmsg;};1.3switch语句switch语句稍微有点例外,每个case标号与switch关键字在同一个缩进层次:switch(behavior){caseMADV_SEQUENTIAL:vma->vm_flags|=VM_SEQ_READ;break;caseMADV_RANDOM:vma->vm_flags|=VM_RAND_READ;break;default:break;}2空格2.1关键字在多数情况下,关键字后面用一个空格来与其他代码分开,比如if、switch、case、for、do、while等。for(i=0;igrowing)do{...}while(sizes->cs_size);sizeof和defined例外,在sizeof和defined后面使用小括号,不使用空格,虽然C语法并没有如此强制规定。如:base=sizeof(slab_t);#ifdefined(CONFIG_SMP)2.2括号函数名和括号之间没有空格。在小括号与内部的表达式之间也没有空格。如:memset(addr,POISON_BYTE,size);而不是:memset(addr,POISON_BYTE,size);该规则同样适用于中括号,以及用于初始化列表的大括号。如:charbuf[20+40];cpucache_t*new[NR_CPUS];structswap_list_tswap_list={-1,-1};当括号中的内容为空时,左右括号之间也没有空格。如:staticconstcharbad_file[]="Badswapfileentry";2.3指针当声明指针类型的数据和返回指针类型的函数时,星号(*)与数据名和函数名相连,而不是与类型名相连。如:slab_t*slabp;staticvoid*s_next(structseq_file*m,void*p,loff_t*pos)2.4二元运算符在二元运算符,诸如=+-<>*/%|&^<=>===!=等的两边各用一个空格:slabp=objp+colour_off;objp-=BYTES_PER_WORD;if(cachep->colour_next>=cachep->colour)if((flags&SLAB_POISON)&&ctor)2.5三元运算符三元运算符?:因形式的特殊性,总共用到4个空格(?和:两边各一个):(gfpflags&GFP_DMA)?p->cs_dmacachep:p->cs_cachep;2.6一元运算符在一元运算符,诸如&*+-~!sizeofdefined等的后面不加空格:address&=~PGDIR_MASK;if(!offset)statickmem_cache_t*clock_searchp=&cache_cache;在后缀形式的++和--前不加空格:pte++;count--;在前缀形式的++和--后不加空格:++pte;--count;在结构运算符.和->的两边不加空格:area->flags=flags;spin_lock(&init_mm.page_table_lock);2.7强制转换在强制转换后面不加空格:area->addr=(void*)addr;2.8分号和逗号分号(;)与前面的代码之间不加空格。当分号用于for语句头部时,与后面的代码(右括号除外)...