typedef与#define、#define与const

0. 宏定义

#define关键字表明即将开始定义一个宏

C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like macro)。对于对象宏来说确实相对简单,但却也不是那么简单的查找替换(这个过程称为宏的展开

1. typedef与#define

通常来说,typedef要比#define要好,特别是在有指针的场合

#define只是简单的字符串替换而typedef则是为一个类型起新名字,例如:

typedef   char  *pStr1;
#define pStr2  char*;

pStr1  s1,s2;    //s1,s2 = char *
pStr2  s3,s4;    //s3 = char*; s4 = char

当const和typedef一起出现时,typedef不会是简单的字符串替换

const PSTR == char* const;

           != const char*;

2.#define与const

#define PI 3.1315926;
const double PI = 3.1416926;
  1. 都用来定义常数,但是#define定义的常数不带类型;const定义的常数是变量,带类型
  2. 作用时刻不同:define是在编译的预处理阶段起作用; const是在编译、运行时起作用
  3. 作用方式不同:define只是简单的字符串替换,没有类型检查; const有对应的数据类型,所以要进行判断,可以避免一些低级错误
  4. 空间占用不同:define占用代码段空间;const占用数据段空间;
  5. 内存空间: define不分配内存,给出的是立即数,有多少次使用就进行多少次替换,在内存中会有多个拷贝,消耗内存大;           const是在静态存储区中分配空间,在程序运行过程中内存中只有一个拷贝
  6. 调试:define不可调试;const可以调试;
  7. 再定义:define可以用#undef取消某个符号的定义,再重新定义;const不能重定义
  8. 其他功能:define可以防止头文件重引用,代码格式如下:
    #ifndef _XXX_H    //如果没有定义XXX头文件
    #define _XXX_H    //就定义该XXX头文件
    
    //头文件代码内容
    
    #endif    //结束

猜你喜欢

转载自blog.csdn.net/qian27enjoy/article/details/82814183