1、#define 和typedef区别
#define一般用于定义常量和语句宏定义,在编译的时候充当宏替换。当然也可以完成typedef的一小部分功能,记住只是一小部分。
typedef 用来声明新类型名,目的是为了可读性以及可定义变量性。
例子1:
#define INT int //没有分号!!
typedef int INT;//记住typedef前面没有 #,以及该语句需要 ; 分号结束。
这个例子中,INT num;这样语句都能实现,基本没有区别。
例子2:
#define pINT int*
typedef int* pINT;
这个例子就有区别了,要定义int*a,*b; 用define实现的是 pINT a,b;替换之后 int* a,b;变成定义的是指针a,和变量b。而typedef 用法,pINT a,b;定义的是指针变量a和指针变量b。
所以在声明新类型名的时候要用typedef,为了安全性。
2、#define 、#if defined()、#ifndef、#ifdef、#else #elseif #endif
a)#define 定义常量,如#define DEBUG 说明DEBUG已有定义
b)#if defined(DEBUG),如果只有一个条件,等同于#ifdef DEBUG
所以#if defined()常用于多条件限制的环境,多条件一般中间可以用“||、&& 、!”来形成多条件判断,如#if defined(EBUG)&& defined(WIN32)
意思是当DEBUG 和WIN32都有定义的时候,才进入#if条件下的语句。
c)#ifdef DEBUG 如果定义了DEBUG ,执行#ifdef 条件下的语句。其意图与#ifndef DEBUG
相反,中间的n代表没有的意思,即如果没有定义。。。。
d)#endif 配对#if 配对