c语言编码风格(1)---->>Linux C编程一站式学习 宋劲杉 北京亚嵌教育研究中心

缩进和空白相关:


1、关键字if/while/for/switch/case与其后的控制表达式的(括号之间插入一个空格分隔,但括号内的表达式应紧贴括号。例如:

while (1); 

2、双目运算符的两侧各插入一个空格分隔,单目运算符和操作数之间不加空格,例如

i = i + 1, ++i, !(i < 1), -x, &a[1]

等。

3、后缀运算符和操作数之间也不加空格,例如取结构体成员 s.a 、函数调用 foo(arg1) 、取数组成员 a[i] 。

4、,号和;号之后要加空格,这是英文的书写习惯,例如:

for (i = 1; i < 10; i++)               foo(arg1, arg2);

5、以上关于双目运算符和后缀运算符的规则并没有严格要求,有时候为了突出优先级也可以写得更紧凑一些,例如

for (i=1; i<10; i++)                  distance = sqrt(x*x + y*y);

等。但是省略的空格一定不要误导了读代码的人,例如

a||b && c

很容易让人理解成错误的优先级。

6、由于UNIX系统标准的字符终端是24行80列的,接近或大于80个字符的较长语句要折行写,折行后用空格和上面的表达式或参数对齐,例如:

if (sqrt(x*x + y*y) > 5.0
    && x < 0.0
    && y > 0.0)

再比如:

foo(sqrt(x*x + y*y),
    a[i-1] + b[i-1] + c[i-1])

7、较长的字符串可以断成多个字符串然后分行书写,例如:

printf("This is such a long sentence that "
       "it cannot be held within a line\n");

C编译器会自动把相邻的多个字符串接在一起,以上两个字符串相当于一个字符串"This is such a long sentence that it cannot be held within a line\n"
8、有的人喜欢在变量定义语句中用Tab字符,使变量名对齐,这样看起来很美观。

       →int    →a, b;
       →double →c;

内核代码风格关于缩进的规则有以下几条。
1、要用缩进体现出语句块的层次关系,使 用Tab字符缩进,不能用空格代替Tab。在标准的字符终端上一个Tab看起来是8个空格的宽度,如果你的文本编辑器可以设置Tab的显示宽度是几个空 格,建议也设成8,这样大的缩进使代码看起来非常清晰。如果有的行用空格做缩进,有的行用Tab做缩进,甚至空格和Tab混用,那么一旦改变了文本编辑器 的Tab显示宽度就会看起来非常混乱,所以内核代码风格规定只能用Tab做缩进,不能用空格代替Tab。
2、if/else、while、do/while、for、switch这些可以带语句块的语句,语句块的{或}应该和关键字写在同一行,用空格隔开,而不是单独占一行。例如应该这样写:

if (...) {
       →语句列表
} else if (...) {
       →语句列表
}

但很多人习惯这样写:

if (...)
{
       →语句列表
}
else if (...)
{
       →语句列表
}

内核的写法和[K&R]一致,好处是不必占太多行,使得一屏能显示更多代码。这两种写法用得都很广泛,只要在同一个项目中能保持统一就可以了。
3、函数定义的{和}单独占一行,这一点和语句块的规定不同,例如:

int foo(int a, int b)
{
       →语句列表
}

4、switch和语句块里的case、default对齐写,也就是说语句块里的case、default标号相对于switch不往里缩进,但标号下的语句要往里缩进。例如:

      →switch (c) {
      →case ‘A‘:
      →       →语句列表
      →case ‘B‘:
      →       →语句列表
      →default:
      →       →语句列表
      →}

用于goto语句的自定义标号应该顶头写不缩进,而不管标号下的语句缩进到第几层。
5、代码中每个逻辑段落之间应该用一个空行分隔开。例如每个函数定义之间应该插入一个空行,头文件、全局变量定义和函数定义之间也应该插入空行,例如:

#include <stdio.h>
#include <stdlib.h>

int g;
double h;

int foo(void)
{
       →语句列表
}

int bar(int a)
{
       →语句列表
}

int main(void)
{
       →语句列表
}

6、一个函数的语句列表如果很长,也可以根据相关性分成若干组,用空行分隔。这条规定不是严格要求,通常把变量定义组成一组,后面加空行,return语句之前加空行,例如:

int main(void)
{
       →int    →a, b;
       →double →c;

       →语句组1

       →语句组2

       →return 0;
}
时间: 2024-08-07 00:18:51

c语言编码风格(1)---->>Linux C编程一站式学习 宋劲杉 北京亚嵌教育研究中心的相关文章

有关于《Linux C编程一站式学习》(备份)

Linux C编程一站式学习 -- PDF版本,共37章: Linux C编程一站式学习 -- 在线版,来自灰狐: Linux C编程一站式学习 -- 在线版,来自亚嵌教育: Linux C一站式学习答案 -- 来自 @胡永浩,托管在gitbook上: Linux C一站式编程答案 -- web版,可以对照查看,部分答案可能有问题: 原文地址:https://www.cnblogs.com/echo1937/p/10062299.html

Linux网络编程一站式学习

提要 学过很多遍计算机网络,依然不会网络编程. 看完这篇文章之后就不会是这样了. 环境:Ubuntu14.04 64bit 何为Socket 是基于TCP/IP的网络应用编程中使用的有关数据通信的概念,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务.Socket正如其英文原意那样,像一个多孔插座.一台主机犹如布满各种插座的

Linux C 编程一站式学习

个人认为这是一个挺不错的从C语言到Linux系统开发的教程,这本是两个网上的文档. 其中 一本是<How To Think Like A Computer Scientist: Learning with C++ >作者Allen B. Downey.原书由Green Tea Press发行,可以从http://www.greenteapress.com/下载到. 另一本是:<Programming from the Ground Up: An Introduction to Progr

《Linux C编程一站式学习》阅读笔记(2):

预处理 #和##是两个预处理运算符(注意不是C语言表达式的运算符),#后接形参(中间可以空格),用于创建字符串字面值:##用于连接两个形参. 函数式宏定义也可以带可变参数,同样是用…表示可变参数,宏定义中的可变参数的部分用_VA_ARGS_表示.如: #define  showlist(…)  printf(#_VA_ARGS_) 取消宏定义用#undef ,取消未定义的宏不算错误. 对条件预处理的编译(#if …  #elseif…  #else…  #endif),可选的方法有:1.手动编辑

《Linux C编程一站式学习》-笔记

hello world 1. 2.GDB 编译时候加上-g,生成的可执行文件才能用gdb进行调试 $gcc -g main.c -o main     //-g选项的作用是在可执行文件中加入源代码的信息 $gdb main (gdb)help                 //可以查看命令的类别 (gdb)help files          //可以查看某一类别中有哪些具体命令 (gdb)list 1            //从第一行开始列出源代码          gdb的很多常用命令

《Linux C编程一站式学习》阅读笔记

上篇  C语言入门 $?是shell中一个特殊变量,表示上一条命令的退出状态. 增量式开发:写一些代码编译运行,没问题再写下面的. 在编译时要加上-g选项,生成的可执行文件才能用gdb进行源码级调试: gcc -g  main.c  -o  main         -g选项的作用是在可执行文件中加入源代码信息,比如第几条机器指令对应第几行源代码.但并不将源代码嵌入,因此在使用gdb调试时仍要使得能找到源代码. gdb提供类似shell的环境,常用命令:list.start.next.step(

Liunx+C编程一站式学习

Liunx+C编程一站式学习这本书有什么特点?面向什么样的读者?这本书最初是为某培训班的嵌入式系统Linux工程师就业班课程量身定做的教材之一.该课程是为期四个月的全日制职业培训,要求学员毕业时具备非常Solid的C编程能力,能熟练地使用Linux系统,同时对计算机体系结构与指令集.操作系统原理和设备驱动程序都有较深入的了解.然而学员入学时的水平是非常初级而且参差不齐的:学历有专科.本科也有研究生,专业有和计算机相关的也有很不相关的(例如会计专业),以前从事的职业有和技术相关的也有完全不相关的(

来自 Google 的 R 语言编码风格指南

本文转自Xiao Nan的博客 R语言是一门主要用于统计计算和绘图的高级编程语言. 这份 R 语言编码风格指南旨在让我们的 R 代码更容易阅读.分享和检查. 以下规则系与 Google 的 R 用户群体协同设计而成. 概要: R编码风格约定 文件命名: 以 .R (大写) 结尾 标识符命名: variable.name, FunctionName, kConstantName 单行长度: 不超过 80 个字符 缩进: 两个空格, 不使用制表符 空白 花括号: 前括号不折行写, 后括号独占一行 赋

R 语言编码风格指南

R 语言是一门主要用于统计计算和绘图的高级编程语言.这份 R 语言编码风格指南旨在让我们的 R代码更容易阅读.分享和检查.以下规则系与 Google 的 R 用户群体协同设计而成. 概要: R编码风格约定 文件命名: 以 .R (大写) 结尾 标识符命名: variable.name, FunctionName, kConstantName 单行长度: 不超过 80 个字符 缩进: 两个空格, 不使用制表符 空白 花括号: 前括号不折行写, 后括号独占一行 赋值符号: 使用 <-, 而非 = 分