Linux下C语言编程环境概述
Linux下C语言编程常用的编辑器是vim或emacs,编译器一般用gcc,编译链接程序用make,跟踪调试一般使用gdb,项目管理用makefile。下面先通过一个小程序来熟悉这些工具的基本应用。各个工具的详细使用方法将在后面的各个章节逐步讲解。
(1) 要编辑C源程序,应首先打开vim或emacs编辑器,然后录入以下多段源代码。使用main函数调用mytool1_print、mytool2_print这两个函数。
#include "mytool1.h"
#include "mytool2.h"
int main(int argc,char **argv)
{
mytool1_print("hello");
mytool2_print("hello");
}
(2) 在mytool1.h中定义mytool1.c的头文件。
/* mytool1.h */
#ifndef_MYTOOL_1_H
#define_MYTOOL_1_H
void mytool1_print(char *print_str);
linux在线编程#endif
(3) 用mytool1.c实现一个简单的打印显示功能。
/* mytool1.c */
#include "mytool1.h"
void mytool1_print(char *print_str)
{
printf("This is mytool1 print %s\n",print_str);
}
(4) 在mytool2.h中定义mytool2.c头文件。
/* mytool2.h */
#ifndef _MYTOOL_2_H
#define _MYTOOL_2
void mytool2_print(char *print_str);
#endif
(5) mytool2.c实现的功能与mytool1.c相似。
/* mytool2.c */
#include "mytool2.h"
void mytool2_print(char *print_str)
{
printf("This is mytool2 print %s\n",print_str);
}
(6) 使用makefile文件进行项目管理。makefile文件内容如下。
main:main.o mytool1.o mytool2.o
    gcc -o main main.o mytool1.o mytool2.o
    main.o:main.c mytool1.h mytool2.h
    gcc -c main.c
    mytool1.o:mytool1.c mytool1.h
    gcc -c mytool1.c
    mytool2.o:mytool2.c mytool2.h
    gcc -c mytool2.c
(7) 将源程序文件和makefile文件保存在Linux下的同一个文件夹下,然后运行make编译链接程序如下:
[david@localhost 1c]$  make
[david@localhost 1c]$ ./main
This is mytool1 print hello
This is mytool2 print hello
至此,这个小程序算是完成了,如果想跟踪调试可以参考第4章。
Linux程序设计的特点
在进行程序设计时首先应养成良好的程序设计风格。Linux操作系统的设计师们鼓励人们采用一种独到的程序设计风格。下面是Linux程序和系统所共有的一些特点。
(1) 简单性。许多最有用的 Linux软件工具都是非常简单的,程序小而易于理解。
(2) 重点性。一个所谓功能齐全的程序可能既不容易使用,也不容易维护。如果程序只用于一个目的,那么当更好的算法或更好的操作界面被开发出来的时候,它就更容易得到改进。
在 Linux世界里,通常会在需求出现的时候把小的工具程序组合到一起来完成一项更大的任务,而不是用一个巨大的程序预测一个用户的需求。
(3) 可反复性。使用的程序组件把应用程序的核心部分组建成一个库。带有简单而又灵活的程序设计接口并且文档齐备的函数库能够帮助其他人开发同类的项目,或者能够把这里的技巧用在新的应用领域。例如dbm数据库函数库就是一套由不同功能的函数组成的集合,而不是一个单一的数据库管理系统。
(4) 过滤性。许多Linux应用程序可以用作过滤器,即它们可以把自己的输入转换为另外一种形式的输出。在后面将会讲到,Linux提供的工具程序能够将其他Linux程序组合成相当复杂的应用软件,其组合方法既新颖又奇特。当然,这类程序组合正是由Linux独特的开发方法支撑着的。
(5) 开放性。文件格式比较成功和流行的 Linux程序所使用的配置文件和数据文件都是普通的 ASCII文本。如果在程序开发中遵循该原则,将是一种很好的做法。它使用户能够利用标准的软件工具对配置数据进行改动和搜索,从而开发出新的工具,并通过新的函数对数据文件进行处理。源代码交叉引用检查软件 ctags就是一个这样的好例子,它把程序中的符
号位置信息以规则表达式的形式记录下来供检索程序使用。
(6) 灵活性。因为你根本无法预测一个不太聪明的用户会怎样使用你的程序,因此在进行程序设计时,要尽可能地增加灵活性,尽量避免给数据域长度或者记录条数加上限制。同时如果可能,应尽量编写能够响应网络访问的程序,使它既能够跨网络运行又能够在本地单机上运行。
  Linux下C语言编码的风格
Linux作为GN家族的一员,其源代码数以万计,而在阅读这些源代码时我们会发现,不同的源代码的美观程度和编程风格都不尽相同,例如下面的glibc代码:
static voidrelease_libc_mem (void)
{
/*Only call the free function if we still are running in mtrace mode. */
if (mallstream != NULL)
__libc_freeres ();
}
或者Linux的核心代码:
static int do_linuxrc(void * shell)
static char *argv[] = { "linuxrc",NULL,};
close(0);close(1);close(2);
setsid();
(void) open("/dev/console",O_RDWR,0);
(void) dup(0);
(void) dup(0);
return execve(shell,argv,envp_init);
}
比较一下,上面的这些代码是否看起来让人赏心悦目?而有些程序员编写的程序由于没有很好的缩进及顺序,让人看起来直皱眉头。编写干净美观的代码,不仅仅使代码更容易阅读,还能使代码成为一件艺术品。与微软的匈牙利命名法一样,Linux上的编程主要有两种编程风格:GNU风格和Linux核心风格,下面将分别介绍。
GNU编程风格
下面是基于GNU的编程风格,编写代码时应遵循这些基本要求。
函数开头的左花括号放到最左边,避免把任何其他的左花括号、左括号或者左方括号放到最左边。
尽力避免让两个不同优先级的操作符出现在相同的对齐方式中。
每个程序都应该有一段简短地说明其功能的注释开头。例如:fmt - filter for simplefilling of
text
请为每个函数书写注释,以说明函数做了些什么,需要哪些种类的参数,参数可能值的含义以及用途。
不要在声明多个变量时跨行。在每一行中都以一个新的声明开头。
当在一个if语句中嵌套了另一个if-else语句时,应用花括号把if-else括起来。
要在同一个声明中同时说明结构标识和变量,或者结构标识和类型定义(typedef)。
尽力避免在if的条件中进行赋值。
请在名字中使用下划线以分隔单词,尽量使用小写; 把大写字母留给宏和枚举常量,以及根据统一的惯例使用的前缀。
命令一个命令行选项时,给出的变量应该在选项含义的说明之后,而不是选项字符之后。
Linux 内核编程风格
下面是 Linux 内核所要求的编程风格:
注意缩进格式。
将开始的大括号放在一行的最后,而将结束大括号放在一行的第一位。
命名系统。变量命名尽量使用简短的名字。
函数最好要短小精悍,一个函数最好只作一件事情。
注释。注释说明代码的功能,而不是说明其实现原理。
看了上面两种风格的介绍,读者是不是觉得有些太多了,难以记住?不要紧,Linux有很多工具来帮助我们。除了vim和emacs以外,还有一个非常有意思的小工具 indent可以帮我们美化C/C++源代码。
下面用这条命令将Linux 内核编程风格的程序quan.c转变为 GNU编程风格,代码如下:
[david@localhost ~]$ indent -gnu quan.c
利用indent这个工具,大家就可以方便地写出漂亮的代码来。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。