/*
============================================================================
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);
}