王为民的技术和生活空间

练内功、勤实战、学习数学、迸发创新意识、注重团队精神,把握好前进的方向…………

用户操作
[即时聊天] [发私信] [加为好友]
王为民ID:ningboweimin
93346次访问,排名1066,好友17人,关注者23人。
08.05-至今 深圳清华力合通信有限公司 MMI开发
07.09--08.05 深圳胜博联技术有限公司 MTK MMI开发。
05.12-07.08 宁波高凌通信技术有限公司工作,主要负责双膜(GSM/PHS)手机及小灵通的研究和开发,平台涉及展讯及东芝。
05.6-05.12 国家数字交换系统工程技术研究中心(NDSC) 主要从事路由器路由协议调试和开发,具体负责多协议标志交换(MPLS)模块,深入了解了其信令和控制协议——标记分发协议(LDP)。
ningboweimin的文章
原创 104 篇
翻译 1 篇
转载 105 篇
评论 18 篇
王为民的公告
清新家园

关注C语言,关注生活。 QQ:94686732 Msn:wwmzxy@hotmail.com
wangweiminxy@gmail.com
XING
最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
ningboweimin:自己顶下先。。。
wuqifeng0101:你好 不知道你能不能提供信大微电子专业的专业课试题数字电路和微机原理 谢谢!
wangseaya:真是幸福的一对啊
羡慕ing
祝福ing
sunag:天仙配
羡慕
嫂子真漂亮
吼吼
不过呢
你有点胖了
尤其是肚子
要多运动啊
文章分类
收藏
相册
户外婚礼
美丽风景
我和朋友
行网聚会
IT技术
IBM技术专家群
ITPUB
MSDN中国
VC知识库
中国Unix技术
中国系统分析师
嵌入式资讯网
红联LINUX
计算机世界
软件工程专家网
管理天地
IT经理世界
华尔街日报
好书阁
《华为真相》
《商道》
《墨迹》
《没有任何借口》
《细节决定成败》
朋友圈
My Gallery
XING宁波
军华
冰儿
可爱狼
小潘
嵐曦一尘
月光博客
朗朗星空
梅花三弄
永超
江涛
瀚海星尘
程军剑
管为为
胡雪儿
馨荣家园
网络通信
Cisco网络技术
中国3G通信网
中国协议分析网
中国通信资源网
休闲娱乐
Google黑板报
Mofile TV
人民网
英语学习网
行网中国
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 函数设计规则与例子收藏

新一篇: Google女性工程师揭密:如何准备Google软件工程师面试 | 旧一篇: C语言的万恶之首----宏

函数设计规则与例子
函数是C++/C程序的基本功能单元,其重要性不言而喻。函数设计的细微缺点很容易导致该函数被错用,所以光使函数的功能正确是不够的。本章重点论述函数的接口设计和内部实现的一些规则。
函数接口的两个要素是参数和返回值。C语言中,函数的参数和返回值的传递方式有两种:值传递(pass by value)和指针传递(pass by pointer)。C++ 语言中多了引用传递(pass by reference)。由于引用传递的性质象指针传递,而使用方式却象值传递,常常迷惑不解,容易引起混乱,请先阅读林锐博士的《高质量C++/C编程指南》一书的第六章--函数设计,链接如下:
而我要说的就是在编程的过程中,不用在函数的声明和定义中混用新旧两种风格。旧风格就是K&R C风格,新风格是ANSI C原型风格。

如果函数在头文件里的声明是K&R C风格的,那么该函数的定义也应该使用K&R C风格的语法。

文件一:int foo();

文件二:int foo()

int a;

int b;

{

/*......*/

}

如果函数具有ANSI C原型,那么在它的定义中也使用ANSI C风格的语法。

文件一:int foo(int a ,int b);

文件二:int foo(int a ,int b)

{

/*.....*/

}

以下是我实际工作中的例子,在文件flash.h中的定义如下。

#ifndef _FLASH_H_
#define _FLASH_H_
#include "_define.h"


#define _FLASH_ID_SV7C3208UTA_701  0x7ff6 // for silicon 7C top
#define _FLASH_ID_SV7C3208UBA_701  0x7ff9 // for silicon 7C bottom

#define __FADR_OFFSET  0xC00000//for silicon flash

_WORD  Bios_GetFlashIdCode(_VOID);
_BOOL  ToggleWait(_DWORD addr);
_BOOL  Bios_EraseFlashSector(_DWORD addr);
//_BOOL  Bios_FlashChipErase(_VOID);
_BOOL  Bios_WriteFlash(_DWORD addr, _LPBYTE str,_DWORD size);
_DWORD Bios_ReadFlash(_DWORD addr,_LPBYTE str,_DWORD size);
_BYTE  Bios_ReadFlashByte(_DWORD addr);
_WORD  Bios_ReadFlashWord(_DWORD addr);
_DWORD Bios_ReadFlashDWord(_DWORD addr);
_BOOL Bios_EraseFlash(_DWORD addrStart,_DWORD size);
_VOID Bios_ReWriteSector(_DWORD addr, _PBYTE str,_DWORD size);
_BOOL Bios_UpdateBootCode(_DWORD addr, _PBYTE str,_DWORD size);

#endif // _FLASH_H_

而在其函数定义中,也应该按照头文件中函数的声明的格式来编写。

文件flash.c

………………

/*
------------------------------------------------------------------------
 FUNCTION:  Bios_ReadFlash
 PURPOSE:  read flash to buffer
 ENTRY:   address ,buffer ,size
 RETURN:   size
 FLOWCHART
 NOTE   
------------------------------------------------------------------------
*/
_DWORD Bios_ReadFlash(_DWORD addr,_LPBYTE str,_DWORD size)
{
 _DWORD i, len;
 _WORD x;

 len = (size+1)/2;
 addr |=__FADR_OFFSET;
 
 for(i=0;i<len;i++)
 {
  x = __F_ADDR_(addr);
  *str++ = (_BYTE)x;
  if ( ((i+1)*2) <= size )
   *str++ = (_BYTE)(x>>8);
  addr += 2;
 }
 
 return i;
}
/*
------------------------------------------------------------------------
 FUNCTION:  Bios_ReadFlashByte
 PURPOSE:  read a byte from flash
 ENTRY:   address
 RETURN:   byte
 FLOWCHART
 NOTE   
------------------------------------------------------------------------
*/
_BYTE Bios_ReadFlashByte(_DWORD addr)
{
 _WORD data;
 _BYTE byte;
 
 data = __F_ADDR_(addr|__FADR_OFFSET);
 if ( (addr % 2) == 0 )
  byte = (_BYTE)data;
 else
  byte = (_BYTE)(data >> 8);
 return byte;
}

/*
------------------------------------------------------------------------
 FUNCTION:  Bios_ReadFlashWord
 PURPOSE:  read a word from flash
 ENTRY:   address
 RETURN:   word
 FLOWCHART
 NOTE   
------------------------------------------------------------------------
*/
_WORD Bios_ReadFlashWord(_DWORD addr)
{
 return (__F_ADDR_(addr|__FADR_OFFSET));

}
/*
------------------------------------------------------------------------
 FUNCTION:  Bios_ReadFlashDWord
 PURPOSE:  read a double word from flash
 ENTRY:   address
 RETURN:   double word
 FLOWCHART
 NOTE   
------------------------------------------------------------------------
*/
_DWORD Bios_ReadFlashDWord(_DWORD addr)
{
 return (__F_ADDRDWD_(addr|__FADR_OFFSET));
}

_BOOL Bios_EraseFlash(_DWORD addrStart,_DWORD size)
{
 _DWORD addr;
 _DWORD sectorSize;
 addrStart|=__FADR_OFFSET;     //add for compatible flash address!
 for(addr=addrStart;addr < (addrStart+size);addr +=sectorSize)
 {
  if(!Bios_EraseFlashSector(addr))
   return FALSE;
                                                                            //add for silicon flash 05/07/2005  
#if defined(_FLASH_ID_SV7C3208UBA_701)\
 ||defined(_FLASH_ID_SV7C3208UTA_701)
 
  switch(g_flashID)
  {
   case _FLASH_ID_SV7C3208UTA_701: //Top boot
    if(addr<0xff0000)
     sectorSize=0x10000;
    else
     sectorSize=0x2000;
    break;
    
   case _FLASH_ID_SV7C3208UBA_701: //Bottom boot
    if(addr < 0xC10000)
     sectorSize= 0x2000;
    else
     sectorSize= 0x10000;
    break;

   default:
    break;
  }
#endif
  
 }

 return TRUE;
}

………………

这里不再一一列举每个函数。

这一点一定要记住,不然会有很多的麻烦。一致性格外重要。

发表于 @ 2006年11月30日 14:16:00|评论(loading...)|编辑

新一篇: Google女性工程师揭密:如何准备Google软件工程师面试 | 旧一篇: C语言的万恶之首----宏

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 王为民