typedef、#define、const用法和注意点。

typedef:            (http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html)

用法:

1.定义一个类型别名,便于直观识别,另外注意不是简单的宏替换,如下:

  typedef  PTD1  int*;

 #defien   PTD2  int*

PTD1 a,b;

PTD2 a,b;   区别是第一行相当于int*a;intb;(即int*a,b;),第二行相当于int*a;int*b;。

2.与结构体公用体定义配合使用,例如:

typedef struct

{

  int a;

  char b[10];

  int*c;

}SYS_PARA_QDIES;

SYS_PARA_QDIES  Sys_Para_Qdies1,Sys_Para_Qdies2;

 3.定义一个与平台无关的类型,便于移植。如:

  typdef real double long;

  typdef real long;  不同的平台移植完成后仅更改typedef后定义即可,#defien也能完成此功能,但是相较于define,typedf更稳健。

用法陷阱:(没看懂第一个)

陷阱一:
记住,typedef是定义了一种类型的新别名,不同于宏,它不是简单的字符串替换。比如:
先定义:
typedef   char*   PSTR;
然后:
int   mystrcmp(const   PSTR,   const   PSTR);

const   PSTR实际上相当于const   char*吗?不是的,它实际上相当于char*   const。
原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char*   const。
简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。

陷阱二:
typedef在语法上是一个存储类的关键字(如auto、extern、mutable、static、register等一样),虽然它并不真正影响对象的存储特性,如:
typedef   static   int   INT2;   //不可行
编译将失败,会提示“指定了一个以上的存储类”。

#define    ( http://www.cnblogs.com/Jency/articles/C_Cplusplus_define.html)

用法

1.简单的#define 定义

   例如: #defien max 100

  仅仅是文本替换,在预编译过程中起作用,不做安全检查,注意与const常量的区分。

2.#defien的函数定义

  例如: #defien max(x,y)   ((x)>(y)?(x):(y))

    #defien ADD(x,y)   ((x)+(y))  

      注意用括号分层,防止在使用时出现   c*ADD(a,b)*d的情况。 再一次说明#define仅仅是文本替换。

3宏定义函数语句

例如:注意多行时换行加\,代表宏定义还未结束。

  #define BLUETOOTH_UART_PIN_PRESLEEP()                        \
    do{                                                        \
      STM32_GPIO_InitTypeDef GPIO_InitStruct;                  \
      GPIO_InitStruct.Pin = STM32_GPIO_PIN_9|STM32_GPIO_PIN_10;  \
      GPIO_InitStruct.Mode = STM32_GPIO_MODE_ANALOG;           \
      GPIO_InitStruct.Pull = STM32_GPIO_NOPULL;                \
      STM32_GPIO_Init(GPIOA, &GPIO_InitStruct);                \
    } while(0)

4.条件编译

  #ifdef  (标识)

 程序段

 #else

程序段

#endif

5.头文件的包含使用

#ifndef  AAA

#define AAA

#ifndef   D20_READ_MET_APP_H
#define       D20_READ_MET_APP_H

防止多次引用,导致重复定义的错误。

注意点:

1.#define 是全局有效。typedef 是本文件从定义处开始有效。

const

用法:

1.

 

转载于:https://www.cnblogs.com/tubasiji/p/7999463.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值