#define和typedef的简单区别及使用

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

上一篇:守护公民个人信息安全亟须织牢法网


下一篇:mysql sampdb数据库存储过程操作记录