第9章 Linux程序设计基础 本章学习目标 通过对本章的学习,读者应该掌握以 下主要内容 o Linux编程风格 o Linux下IDE的使用 o Linux下使用GNUc开发应用程序 o Linux程序的调试 o Linux下使用RCS/CWS来管理源程序 o Linux下软件打包
第9章 Linux程序设计基础 本章学习目标 通过对本章的学习,读者应该掌握以 下主要内容: Ø Linux编程风格 Ø Linux下IDE的使用 Ø Linux下使用GNU cc开发应用程序 Ø Linux程序的调试 Ø Linux下使用RCS/CVS来管理源程序 Ø Linux下软件打包
9.1概述 91.1 Linux编程 Linux软件开发一直在 Interne环境下讲行。这个环境 是全球性的,编程人员来自世界各地。只要能够访问Web 站点,就可以启动一个以 Linux为基础的软件项目。 Linux开发工作经常是在 Linux用户决定共同完成一个项 目时开始的。当开发工作完成后,该软件就被放 Internet站点上,任何用户都可以访问和下载它。由于 这个活跃的开发环境,新的以 Linux为基础的软件功能日 益强大,而且呈现爆炸式的增长态势 大多数 Linux软件是经过自由软件基金会(Free Software foundation)提供的GNU(GNU即 GNUS not UNIX)公开认证授权的,因而通常被称作GNU软件。GNU 软件免费提供给用户使用,并被证明是非常可靠和高效 的。许多流行的 Linux实用程序如C编译器、 shell和编辑 器都是GNU软件应用程序
9.1 概述 9.1.1 Linux编程 Linux软件开发一直在Internet环境下讲行。这个环境 是全球性的,编程人员来自世界各地。只要能够访问Web 站点,就可以启动一个以Linux为基础的软件项目。 Linux开发工作经常是在Linux用户决定共同完成一个项 目时开始的。当开发工作完成 后,该软件就被放 到 Internet站点上,任何用户都可以访问和下载它。由于 这个活跃的开发环境,新的以Linux为基础的软件功能日 益强大,而且呈现爆炸式的增长态势。 大多数Linux软件是经过自由软件基金会(Free Software Foundation)提供的GNU(GNU 即 GNU’s not UNIX)公开认证授权的,因而通常被称作GNU软件。GNU 软件免费提供给用户使用,并被证明是非常可靠和高效 的。许多流行的Linux实用程序如C编译器、shell和编辑 器都是GNU软件应用程序
Linux程序需要首先转化为低级机器语言即所谓的二进 制代码以后,才能被操作系统执行。例如编程时,先用普 通的编程语言生成一系列指令,这些指令可被翻译为适 的可执行应用程序的二进制代码。这个翻译过程可由解释 器一步步来完成,或者也可以立即由编译器明确地完成 she编程语言如BASH、TCSH、GAWK、Per、Tc和π都利用 自己的解释器。用这些语言编制的程序尽管是应用程序文 件,但可以直接运行。编译器则不同,它将生成一个独立 的二进制代码文件然后才可以运行
Linux程序需要首先转化为低级机器语言即所谓的二进 制代码以后,才能被操作系统执行。例如编程时,先用普 通的编程语言生成一系列指令,这些指令可被翻译为适当 的可执行应用程序的二进制代码。这个翻译过程可由解释 器一步步来完成,或者也可以立即由编译器明确地完成。 shell编程语言如BASH、TCSH、GAWK、Perl、Tcl和Tk都利用 自己的解释器。用这些语言编制的程序尽管是应用程序文 件,但可以直接运行。编译器则不同,它将生成一个独立 的二进制代码文件然后才可以运行
9.12 Linux编程风格 1.GNU风格 (1)函数返回类型说明和函数名分两行放置,函数起始字符和函数 开头左花括号放到最左边。 (2)尽量不要让两个不同优先级的操作符出现在相同的对齐方式中 应该附加额外的括号使得代码缩进可以表示出嵌套 (3)按照如下方式排版do- while语句: (4)每个程序都应该以一段简短的说明其功能的注释开头 (5)请为每个函数书写注释,说明函数是做什么的,需要哪些入口 参数,参数可能值的含义和用途。如果用了非常见的、非标准的东西 或者可能导致函数不能工作的任何可能的值,应该进行特殊说明。如 果存在重要的返回值,也需要说明。 (6)不要声明多个变量时跨行,每一行都以一个新的声明开头。 (7)当一个中嵌套了另一个iese时,应用花括号把iese括起来 (8)要在同一个声明中同时说明结构标识和变量或者结构标识和类 型定义( typed。先定义变量,再使用
9.1.2 Linux编程风格 (1)函数返回类型说明和函数名分两行放置,函数起始字符和函数 开头左花括号放到最左边。 (2)尽量不要让两个不同优先级的操作符出现在相同的对齐方式中, 应该附加额外的括号使得代码缩进可以表示出嵌套。 (3)按照如下方式排版do-while语句: (4)每个程序都应该以一段简短的说明其功能的注释开头。 (5)请为每个函数书写注释,说明函数是做什么的,需要哪些入口 参数,参数可能值的含义和用途。如果用了非常见的、非标准的东西, 或者可能导致函数不能工作的任何可能的值,应该进行特殊说明。如 果存在重要的返回值,也需要说明。 (6)不要声明多个变量时跨行,每一行都以一个新的声明开头。 (7)当一个if中嵌套了另一个if-else时,应用花括号把if-else括起来。 (8)要在同一个声明中同时说明结构标识和变量或者结构标识和类 型定义(typedef)。先定义变量,再使用。 1.GNU风格
(9)尽量避免在if的条件中进行赋值 (10)请在名字中使用下划线以分割单词,尽量使用小写;把大写字 母留给宏和枚举常量,以及根据统一惯例使用的前缀。例如,应该使 用类似 ignore space change flag的名字;不要使用类似 Cant readThis的名字 1)用于表明一个命令行选项是否给出的变量应该在选项含义的说 明之后,而不是选项字符之后被命名 2. Linux内核编程风格 (1)Linuⅸx内核缩进风格是8个字符。 (2) Linux内核风格采用K&R标准,将开始的大括号放在一行的最后, 而将结束的大括号放在一行的第一位。 (3)命名尽量简洁。不应该使用诸如 ThisvariablelsatemporaryCounter之类的名字。应该命名为tmp,这 样容易书写,也不难理解。但是命名全局变量,就应该用描述性命名 方式,例如应该命名“ count active users(”,而不是“ catus0 本地变量应该避免过长
(9)尽量避免在if的条件中进行赋值。 (10)请在名字中使用下划线以分割单词,尽量使用小写;把大写字 母留给宏和枚举常量,以及根据统一惯例使用的前缀。例如,应该使 用类似ignore_space_change_flag的名字;不要使用类似 iCantReadThis的名字。 (11)用于表明一个命令行选项是否给出的变量应该在选项含义的说 明之后,而不是选项字符之后被命名。 2.Linux 内核编程风格 (1)Linux内核缩进风格是8个字符。 (2)Linux内核风格采用K&R标准,将开始的大括号放在一行的最后, 而将结束的大括号放在一行的第一位。 (3)命名尽量简洁。不应该使用诸如 ThisVariableIsATemporaryCounter之类的名字。应该命名为tmp,这 样容易书写,也不难理解。但是命名全局变量,就应该用描述性命名 方式,例如应该命名“count_active_users()”,而不是“cntusr()”。 本地变量应该避免过长