c程序员的修养一
c吧
全部回复
仅看楼主
level 6
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。
我认为好的程序员应该有以下几方面的素质:
 1、有专研精神,勤学善问、举一反三。
 2、积极向上的态度,有创造性思维。
 3、与人积极交流沟通的能力,有团队精神。
 4、谦虚谨慎,戒骄戒燥。
 5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。
代码编程常用规范
1、版权和版本
好的程序员会给自己的每个函数,每个文件,都注上版权和版本。
2、缩进、空格、换行、空行、对齐
缩进:代码具有层次感
空格:运算符两边都加空格
换行:一行仅写一句话
对齐:同级别代码对齐
空行:代码分段
3、程序注释
养成写程序注释的习惯,这是每个程序员所必须要做的工作。 看过那种几千行,却居然没有一行注释的程序。这就如同在公路上驾车却没有路标一样。用不了多久,连自己都不知道自己的意图了,还要花上几倍的时间才看明白,这种浪费别人和自己的时间的人,是最为可耻的人。
4、函数的[in][out]参数
我经常看到这样的程序:
FuncName(char* str)
{
  int len = strlen(str);
  .....
}
char* GetUserName(struct user* pUser)
{
  return pUser->name;
}
不!请不要这样做。
你应该先判定一下传进来的那个指针是不是为空。假如传进来的指针为空的话,那么,你的一个大的系统就会因为这一个小的函数而崩溃。一种更好的技术是使用断言(assert),这里我就不多说这些技术细节了。
5、对系统调用的返回进行判定
对于一些系统调用,比如打开文件,我经常看到,许多程序员对fopen返回的指针不做任何判定,就直接使用了。然后发现文件的内容怎么也读出不,或是怎么也写不进去。还是判定一下吧:
  fp = fopen("log.txt", "a");
  if ( fp == NULL ){
    printf("Error: open file error ");
    return FALSE;
  }
其它还有许多啦,比如:socket返回的socket号,malloc返回的内存。请对这些系统调用返回的东西进行判定。
6、if 语句对出错的处理
-----------
我看见你说了,这有什么好说的。还是先看一段程序代码吧。
  if ( ch >= ′0′ && ch <= ′9′ ){
    /* 正常处理代码 */
  }else{
    /* 输出错误信息 */
    printf("error ...... ");
    return ( FALSE );
  }
这种结构很不好,非凡是假如“正常处理代码”很长时,对于这种情况,最好不要用else。先判定错误,如:
  if ( ch < ′0′ ch > ′9′ ){
    /* 输出错误信息 */
    printf("error ...... ");
    return ( FALSE );
  }
/* 正常处理代码 */
  ......
这样的结构,不是很清楚吗?突出了错误的条件,让别人在使用你的函数的时候,第一眼就能看到不合法的条件,于是就会更下意识的避免。
7、头文件中的#ifndef
千万不要忽略了头件的中的#ifndef,这是一个很要害的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。
还是把头文件的内容都放在
#ifndef和#
endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:
  #ifndef <标识>
  #define <标识>
......
  ......
#endif
8、在堆上分配内存
可能许多人对内存分配上的“栈 stack”和“堆 heap”还不是很明白。
包括一些科班出身的人也不明白这两个概念。我不想过多的说这两个东西。
简单的来讲,stack上分配的内存系统自动释放,heap上分配的内存,系统不释放,
对于malloc和free的操作有以下规则:
1) 配对使用,有一个malloc,就应该有一个free。(C++中对应为new和delete)
2) 尽量在同一层上使用,不要像上面那种,malloc在函数中,而free在函数外。最好在
同一调用层上使用这两个函数。
3) malloc分配的内存一定要初始化。free后的指针一定要设置为NULL。
9、变量的初始化
变量一定要被初始化再使用。
10、h和c文件的使用
H文件和C文件怎么用呢?一般来说,H文件中是declare(声明),C文件中是define(定义)。 H文件中一般是变量、宏定义、枚举、结构和函数接口的声明,就像一个接口说明文件一样。而C文件则是实现细节。
11、函数的传值和传指针
向函数传参数时,一般而言,传入非const的指针时,就表示,在函数中要修改这个指针把指内存中的数据。假如是传值,那么无论在函数内部怎么修改这个值,也影响不到传过来的值,因为传值是只内存拷贝。
12、修改别人程序的修养
当你维护别人的程序时,请不要非常主观臆断的把已有的程序删除或是修改。我经常看到有的程序员直接在别人的程序上修改表达式或是语句。修改别人的程序时,请不要删除别人的程序,假如你觉得别人的程序有所不妥,请注释掉,然后添加自己的处理程序,必竟,你不可能100%的知道别人的意图,所以为了可以恢复,
13、把相同或近乎相同的代码形成函数和宏
有人说,最好的程序员,就是最喜欢“偷懒”的程序,其中不无道理。
假如你有一些程序的代码片段很相似,或直接就是一样的,请把他们放在一个函数中。而假如这段代码不多,而且会被经常使用,你还想避免函数调用的开销,那么就把他写成宏吧。
2026年04月21日 09点04分 1
1