在前面曾总结过微软环境下编程的规范【1】,但是在linux下,没有自动补起,以及没有像VS那样高级好用的可视化开发工具,如果变量,函数定义太复杂,敲的也累,下面总结linux下编程风格,资料来源于网络。

一、GNU风格

1.函数返回类型说明和函数名分两行放置,函数起始字符和函数开头左花括号放到最左边,

例如:

static char *

main (argc, argv)

int argc;

char *argv[];

{

......

}

或者是用标准C:

static char *

main (int argc, char *argv[])

{

......

}

如果参数太长不能放到一行,请在每行参数开头处对齐:

int

net_connect (struct sockaddr_in *cs, char *server, unsigned short int

port,

char *sourceip, unsigned short int sourceport, int sec)

对于函数体,我们应该按照如何方式排版:

在左括号之前、逗号之后,以及运算符号前后添加空格使程序便于阅读,例如:

if (x < foo (y, z))

haha = bar[4] + 5;

else

{

while (z)

{

haha += foo (z, z);

z--;

}

return ++x + bar ();

}

当一个表达式需要分成多行书写的时候,应该在操作符之前分割。例如:

if (foo_this_is_long && bar > win (x, y, z)

&& remaining_condition)

2. 尽量不要让两个不同优先级的操作符出现在相同的对齐方式中,应该附加额外的括号使得代码缩进可以表示出嵌套。例如:

错误的对齐:

mode = (inmode[j] == VOIDmode

|| GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])

? outmode[j] : inmode[j];

正确的对齐:

mode = ((inmode[j] == VOIDmode

|| (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE(inmode[j])))

? outmode[j] : inmode[j];

3. 按照如下方式排版do-while语句:

do

{

a = foo (a);

}

while (a > 0);

4. 每个程序都应该以一段简短的说明其功能的注释开头。例如:

/* fmt - filter for simple filling of text */

5. 请为每个函数书写注释,说明函数做了什么,需要那些种类的参数,参数可能值的含义和用途。如果用了非常见的、非标准的东西,或者可能导致函数不能工作的任何可能的值,应该对他们进行说明。如果存在重要的返回值,也需要说明。

6. 不要声明多个变量时跨行,每一行都以一个新的声明开头。例如:

错误的声明:

int foo,

bar;

正确的声明:

int foo, bar;

或者:

int foo;

int bar;

如果他们是全局变量,在每一个之前都应该注释。

7. 当一个if中嵌套了另一个if-else时,应用花括号把if-else括起来。例如,不要写:

if (foo)

if (bar)

win ();

else

lose ();

而要写:

if (foo)

{

if (bar)

win ();

else

lose ();

}

如果再else中嵌套了一个if,可以这样写else if:

if (foo)

...

else if (bar)

...

按照与then那部分代码相同的缩进方式缩进else if的then部分代码,也可以在花括号

中像下面那样把if嵌套起来:

if (foo)

...

else

{

if (bar)

...

}

8. 要在同一个声明中同时说明结构标识和变量或者结构标识和类型定义(typedef)。单独的说明结构标识,而后用它定义变量或者定义类型。

9. 尽量避免在if的条件中进行赋值。例如,不要写:

if ((foo = (char *) malloc (sizeof *foo)) == 0)

fatal ("virtual memory exhausted");

而要写:

foo = (char *) malloc (sizeof *foo);

if (foo == 0)

fatal ("virtual memory exhausted");

10. 请在名子中使用下划线以分割单词,尽量适用小写;把大写字母留给宏和枚举常量,以及根据统一惯例使用前缀。例如,应该使用类似ignore_space_change_flag的名子;不要使用类似iCantReadThis的名子。

11. 用于表明一个命令行选项是否给出的变量应该在选项含义的说明之后,而不是选项字符之后被命名。一条注释既应该说明选项的精确含义,又应该说明选项的字母。例如:

/* ignore changes in horizontal whitespace (-b). */

int ignore_space_change_flag;

二、Linux 内核编程风格

1. Linux内核缩进风格是8个字符。

2. Linux内核风格采用K&R标准,将开始的大括号放在以行的最后,而将结束的大括号放在以行的第一位,如下:

if (x == 1) {

......

}

命名函数时,开始的括号使放在下一行的第一位,如下:

int function(int x)

{

......

}

结束的括号在它所占的那一行是空的,除了它还可以跟随着同一条语句的继续符号。如

while在do-while循环,或者else在if语句中。如下:

do {

......

) while (condition);

以及:

if (x == y) {

...

} else if (x > y) {

...

) else {

...

}

3. 命名尽量简洁。不应该使用诸如 ThisVariableIsATemporaryCounter之类的名子。应该命名为tmp,这样容易书写,也不难理解。但是命名全局变量,就应该用描述性命名方式,例如应该命名count_active_users(),而不是cntusr()。本地变量应该避免过长。

4. 函数最好短小精悍,一般来说不要让函数的参数多于10个,否则你应该尝试分解这个过于复杂的函数。

5. 通常情况,注释说明代码的功能,而不是其实现原理。避免把注释插到函数体内,而写到函数前面,说明其功能,如果这个函数的确很复杂,需要其中有部分注释,可以写些简短的注释来说明或禁告那些重要的部分,但是不能过多。

如果你感觉这些规则过于复杂,有一个小工具可以帮助你——indent。例如你要把你代码转换成GNU或Linux核心风格,你可以分别使用:

indent -gnu test.c

indent -kr -i8 test.c

其他用法请使用man indent查询。

【1】http://www.cnblogs.com/mydomain/archive/2010/12/03/1895777.html

【2】 http://www.huihoo.org/gnu/c.html

转载于:https://www.cnblogs.com/mydomain/archive/2011/07/30/2121823.html

18、Linux下编程风格相关推荐

  1. Linux 内核编程风格

    Linux 内核编程风格 (518 个字於此篇帖子) (已阅读: 1177 次) 这篇短小的文章是对Linux内核编程风格的建议.编程风格非常的个性化,而且,我并不想将我的观点强加给任何人,但是为了变 ...

  2. linux系统编程需要什么,若想成为一名Linux下编程高手,必须能对各种系统调用有透彻的了解...

    原标题:若想成为一名Linux下编程高手,必须能对各种系统调用有透彻的了解 什么是系统调用? Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用.用户可以通过系统调用命令在自己的应用 ...

  3. 为什么在Unix下编程,而不在Linux下编程

    现在Linux是网络上相对火爆的词语,仅在Google中搜索关键词"Linux"就有4亿6千万的页面数:求职时如果你只会个Windows根本就不好意思与人打招呼,会个Unix怕别人 ...

  4. linux网卡名字 mac,linux下编程如何获得所有网卡的信息-包括网卡名字,网卡MAC等等......

    linux下编程如何获得所有网卡的信息-包括网卡名字,网卡MAC等等... (2012-06-07 04:35:41) 标签: 的 linux 数据包 杂谈 linux下编程如何获得所有网卡的信息?包 ...

  5. linux下编程epoll实现将GPS定位信息上报到服务器

    操作系统:CentOS 开发板:fl2440 开发模块:A7(GPS/GPRS),RT3070(无线网卡) ********************************************** ...

  6. Linux下编程获取本地IP地址的常见方法

    代码编译运行平台:Linux 64bits+g++(-m64),-m64表示生成64bits的程序. 在进行Linux网络编程时,经常用到本机IP地址.本文罗列一下常见方法,以备不时之需. 获取本机I ...

  7. 在Linux下编程和在Windows下编程的区别

    Linux和Windows是两种操作系统,从用户群来说Linux是一个以开发者为中心的操作系统,而windows是以消费者为中心的操作系统,这也是两个操作系统作为根本的区别. 在Linux与Windo ...

  8. python在linux编程_python要在linux下编程吗

    不少Python新手经常问到学Python到底需不需要学习Linux? Python不是支持Windows和Linux操作系统吗?能在Windows下开发为什么还要学习Linux? 问这样的问题的朋友 ...

  9. Python零基础入门(1)——Linux下编程图形化界面的安装

    LInux中安装最好使用普通用户,如果你使用root超级用户安装的话,可能会出现一些小问题.比如:在程序中写注释时无法时用中文等等 1.软件安装包的准备--pycharm-community-2018 ...

最新文章

  1. symfony2 Process 组件的学习笔记
  2. 软件系统架构师成长之路(一)
  3. centos 多个yum源,系统怎么选择
  4. 数据仓库--基本概念
  5. 4行代码AC——L1-026 I Love GPLT (5分)
  6. 用delphi 做服务器,basic4android 实现三层数据交互
  7. Fiori Elements - sap.ui.core.util.XMLPreprocessor2 - insert fragment
  8. 在VMware Workstation中批量创建上千台虚拟机(上)
  9. 【转】Microsoft Graph Web应用程序极致开发体验
  10. cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
  11. Python 之面向对象 继承
  12. 【Operator】七大互联网电视牌照商2016年下半年动向之中央三大台
  13. mx播放器有没有投屏功能_这个播放器真是太强大了!
  14. 怎样在python的turtle中输入文字_Python在图片中添加文字的两种方法
  15. 电脑蓝屏c000021a代码错误
  16. 神马? 网飞(Netflix)程序员的基本薪资居然是谷歌的2倍多...
  17. 根据json 动态生成页面——问卷页面
  18. maya 中切换当前渲染器的方法和设置
  19. 国内云服务器,服务商优缺点分析
  20. 电信卡流量套餐超40G后,该如何解除网速限制?

热门文章

  1. Linux 操作系统基础知识
  2. 2017.12.26
  3. linux下搭建FTP服务器
  4. 关于JS获取select值的两种实现方法
  5. 【原创】注意析构函数的使用
  6. zabbix2.2入门教程之编译安装(一)
  7. ASP.NET MVC 整合 Spring.net(1)- Controller进容器
  8. 39--打印从1到最大的n位数
  9. reg型变量怎么赋值_UiPath变量介绍和使用
  10. 华为手机充满有提醒吗_2020手机充电速度排名:最快21分钟充满,华为第15名