C语言代码编写技巧(1)

原创 2004年06月25日 10:44:00


在FreeBSD中分析IPv6源代码时,得出几条C语言代码编写技巧:

1、根据宏定义来实现对不同网络的支持,这样的switch语句中结合宏定义套用预编译指令,有利于减小编译后的内核大小,使得程序结构更清晰,运行更快;如在if_ethersub.c中switch模块:


 switch (ether_type) {
#ifdef INET
    case ETHERTYPE_IP:
......break;
    case ETHERTYPE_ARP:
 ........   break;
#endif
#ifdef IPX
 case ETHERTYPE_IPX:
.......  break;
#endif
#ifdef INET6
 case ETHERTYPE_IPV6:
 .......  break;
#endif
#ifdef NETATALK
 case ETHERTYPE_AT:
  .......  break;
 case ETHERTYPE_AARP:
 .......  break;
#endif
 default:
  .......    break;
 }

2、对需要频繁处理的模块,加入到一个文件模块中。节点在处理接收到的数据报时,因为每个节点都需要对扩展首部中的逐跳选项首部进行处理,所以把此模块编辑到和IPv6头部一起处理的ip6_input模块中,其他扩展首部并不是都需要处理的,有的只在源或者目的主机才处理,如FRAG分片首部。这样加快数据报的处理,提高网络速度。

3、Goto语句的使用。在一个函数中,若有很多相同功能的小模块(10行左右),可以集合到一起,如出错处理等,通过goto联系起来。这样的模块一般放在函数的尾部,使得程序结构更加清晰;

4、复杂数据结构的简单化。可以通过#define来对复杂数据结构成员的重新定义,这样使结构变量更直观,方便维护和阅读;如:
struct ip6_hdr {
 union {
  struct ip6_hdrctl {
   u_int32_t ip6_un1_flow; 
   u_int16_t ip6_un1_plen; 
   u_int8_t  ip6_un1_nxt;
   u_int8_t  ip6_un1_hlim; 
  } ip6_un1;
  u_int8_t ip6_un2_vfc; 
 } ip6_ctlun;
 struct in6_addr ip6_src; 
 struct in6_addr ip6_dst; 
} ;

#define ip6_vfc  ip6_ctlun.ip6_un2_vfc
#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow
#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen
#define ip6_nxt  ip6_ctlun.ip6_un1.ip6_un1_nxt
#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim
#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim

 

5、类函数宏调用(也叫带参数的宏)和函数调用,这是一个在C中很明显的时空转换问题。类函数宏的反应时间快、占用空间多;函数则相反,时间响应慢、空间占用低。在预处理的时候,类函数宏就被编译到源程序中,这样不存在调用时间的问题,而函数相对来说则是独立的,在需要时才去调用——动态调用。如类函数宏:


#define panic(param) { printf(param); exit(-1); }


若是小功能模块,可以考虑用类函数宏实现,方便快捷。

C语言中一些很酷的技巧(cool tricks)

C语言中一些很酷的技巧(cool tricks) 来自Quora,觉得不错,就实践了一下。 1.  #if 0 ...... #endif 块中的内容不会被编译,因为注释不允许嵌套,我们可以把暂...
  • vonzhoufz
  • vonzhoufz
  • 2014年07月12日 11:32
  • 2008

C语言提高代码效率的几种方法

一段完美的代码不仅在于找到一个给定的问题的解决方案,但在它的简单性,有效性,紧凑性和效率(内存)。设计的代码比实际执行更难。因此,每一个程序员当用C语言开发时,都应该保持这些基本的东西在头脑中。本文向...
  • wangliang888888
  • wangliang888888
  • 2016年05月03日 10:05
  • 3279

C#代码精简优化技巧总结

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 在我们写代码的时候可以使用一些...
  • yangli_sky
  • yangli_sky
  • 2014年01月17日 12:01
  • 1572

【C语言】编写代码实现:求一个整数在内存中的二进制位中1的个数

问题:求一个整数存储在内存中的二进制位中1的个数。   实现思路:只要使该整数不断右移(每次右移一位,直到它变为0),然后判断每次右移之后它的最低位是否为1,若是1则用计数器记录,上述过程用循环实现...
  • Sunshine_R9H15Chen
  • Sunshine_R9H15Chen
  • 2017年12月02日 21:58
  • 227

编程精粹--编写高质量C语言代码(1):假想编译程序

编译程序仅仅能查找出程序的语法错误,而对于“数组越界访问”“对空指针解引用”等错误,编译程序是束手无策的。 同时我们知道测试人员所使用的黑箱测试方法所能做的只是往程序里填数据,并看它弹出什么。这就...
  • fuchencong
  • fuchencong
  • 2014年05月09日 19:25
  • 1645

linux内核代码par1(C语言编写)

  • 2009年12月22日 13:14
  • 14.31MB
  • 下载

C语言名题精选百则技巧篇-冼镜光 part-1

  • 2011年03月04日 22:22
  • 14.31MB
  • 下载

C语言代码漏洞审计技巧笔记分享

代码审计主要容易出现漏洞的接口和位置 c language code review note 1 command: argc argv environmental var: getenv ...
  • bjtbjt
  • bjtbjt
  • 2016年03月05日 23:22
  • 2236

代码调试技巧小集合(C语言描述,但C/C++/Pascal通用)

本文源自飞燕之家在线测评论坛http://yzfy.org/,转载清注明出处 1.输入重定向 有不少人对自己提交到网站里得到的错误的结果而感到莫名其妙。 但有可能由于题目的输入数据巨多,要是手工...
  • qq_32146369
  • qq_32146369
  • 2017年03月13日 22:00
  • 170

C语言名题精选百则 技巧篇_冼镜光编著--part1

  • 2010年05月31日 20:24
  • 13.35MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言代码编写技巧(1)
举报原因:
原因补充:

(最多只允许输入30个字)