const

一,const关键词有什么作用。
1,定义const常量。
       例如: const int n = 10;
2,修饰函数的形参。
        该作用很重要,在函数的形参必要的地方加const修饰可以
增加函数的健壮性,防止意外的修改。
例如:

  1.   char *strcpy(char*dest,const char *src)
  2.   {
  3.  +---char*tmp= dest;
  4.  
  5.  +---while((*dest++=*src++)!='\0')
  6.  +---+---/*nothing*/;
  7.  +---return tmp;
  8.  }
字符串拷贝函数源就是一个只读的形参,所以要加上const加以修饰。

const注意点:
    const声明常量时,有一种情况是声明指针,这时候const放在不同
的位置,表示的含义不一样。例如:
const int  *p;
int const *p; //这两种情况是一样的,p所指向的值是常量。
int * const p;//这种情况是指针是常量,而p指向的值是变量。
const int * const p;//这种情况指针p是常量,p所指向的值也是常量。

-------------------------------------------------------------------------------------
二,宏常量。
      C语言中不仅有const常量,还有宏常量,那它们之间有什么区别呢?
 const定义常量是有数据类型的,而#define宏定义常量却没有。
这样const定义的常量编译器可以对其进行数据静态类型安全检查,而
#define宏定义的常量却只是进行简单的字符替换,没有类型安全检查,
例如下:

#define N 100
#define M 200 + N
当程序中使用 M*N 时,原本想要 100 * (200+ N )的却变成了
100 * 200 + N。所以宏存在不安全性。

----------------------------------------------------------------------------------------
三,宏函数。
     C语言中的宏还可以带参数,带参宏又称为宏函数。带参宏也有一些安全隐患,
在linux内核中常用do{}while(0) 来解决这个安全隐患。
    
    为什么很多时候都喜欢使用宏函数呢?宏函数有个优点就是效率高,一般的函数
都要压栈出栈的,而宏函数都是替换,替换也是有代价的,那就是消耗内存,所以
为了一种平衡,在实际程序开发中,一些很短的函数基本上都是用宏函数实现的,
这样就可以节省一些时间,而又不用消耗太多的空间。

   宏函数有一些安全隐患,所以又提出了用inline声明的内敛函数,使用inline声明
的函数和宏函数差不多,都是声明一些短小的函数,inline声明的内敛函数在编译的
阶段就进行了展开,所以inline函数和宏函数差不多,但比宏函数安全。


例如:
  1.   static inline void INIT_LIST_HEAD(struct list_head*list)
  2.   {
  3.   +---list->next= list;
  4.   +---list->prev= list;
  5.   }
  1.   static inline void __list_add(struct list_head*new,
  2.   +---+---+--- struct list_head *prev,
  3.   +---+---+--- struct list_head *next)
  4.   {
  5.   +---next->prev= new;
  6.   +---new->next=next;
  7.   +---new->prev= prev;
  8.   +---prev->next= new;
  9.   }
都是一些短小的函数声明为内敛函数。
--------------------------------------------------------------------------------------

    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值