/* ============================================================================ Name : TestDefine.c Author : lf Version : Copyright : Your copyright notice Description : #define和typedef的简单区别及使用 1 两者执行时间的差异 #define是宏定义,发生在预处理阶段,即编译之前. 它只进行简单而机械的替换,而不进行任何检查. typedef在编译阶段有效.由于是在编译阶段,因此typedef有类型检查的功能. 2 两者作用的差异 typedef用于给一个已经存在的类型一个别名. #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查.例如: #define PI 3.14 在预处理时s=PI*r*r会替换为s=3.14*r*r 3 写法上的区别. typedef语句以;结尾,但是#define语句末尾处无; 其实预处理的语句(#)的结尾都没有;号,比如#include <stdio.h> ============================================================================ */ #include <stdio.h> #include <stdlib.h> //利用#define定义变量NUMBER,其值为9527 #define NUMBER 9527 void printFun(int i); //利用typedef将int定义成INTEGER typedef int INTEGER; //利用typedef定义数组. //定义的intArray数组存放整数且大小为10 //它的通用定义方式为: //typedef <元素类型关键字><数组类型名>[<常量表达式>]; typedef int intArray[10]; //利用typedef定义结构体 typedef struct { char name; int age; }student; //利用typedef定义函数指针 typedef void (*printFunP)(int); int main(void) { testTypedef(); testDefine(); return EXIT_SUCCESS; } void testTypedef(){ INTEGER i=5; printf("INTEGER i=%d\n",i); printf("=============\n"); intArray array={1,2,3,4,5,6,7,8,9,0}; int j; for (j = 0; j < 10; j++) { printf("j=%d\n",j); } printf("=============\n"); student s; s.name='L'; s.age=25; printf("name=%c,age=%d\n", s.name, s.age); printf("=============\n"); //利用之前定义的函数指针 printFunP printFunPointer; printFunPointer=printFun; (*printFunPointer)(27); //(printFunPointer)(27);//一样 } void printFun(int i){ printf("i=%d\n",i); printf("=============\n"); } void testDefine(){ printf("number=%d\n",NUMBER); }