#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);
}

时间: 2024-10-24 04:43:17

#define和typedef的简单区别及使用的相关文章

[c++]通过一个简单的程序引出#define与typedef的区别

废话不多说,请看下面程序: #include<iostream> using namespace std; #define SIGN1 char* // typedef char * SIGN2;//typedef是一条语句所以以分号结尾 int main() { SIGN1 ch1,ch2; SIGN2 ch3,ch4; cout<<sizeof(ch1)<<" "<<sizeof(ch2)<<endl; cout<&

c语言define和typedef区别和使用

define完全可以理解替换,typedef代表别名.听着差不多的意思,那2者区别在哪? 先来个简单例子查看基本使用. //define和typedef区别 #define DB double //替换 define 被替换的内容 替换的内容 typedef double db; //别名 typedef 原来的类型名 新的别名 //typedef需要分号 ,typeof 去掉以后符合语法规则,define去掉就会报错 void main() { //看不出区别 DB d1 = 1.2,d2=1

#define 和typedef的区别

typedef和define的详细区别 2011-04-19 15:11 firnow firnow 字号:T | T 对于都可以用来给对象取一个别名的Typedef和define来说,是有区别的.本文通过对typedef和define的介绍,来给读者详细的讲解它们存在的本质区别,供参考. AD:51CTO学院:IT精品课程在线看! typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字. #define是预处理指令.下面让我们一起

程序猿之---C语言细节21(#define和typedef区别、结构体细节)

主要内容:#define和typedef区别.结构体细节 #include <stdio.h> #define INT_D int* #define CHAR_D char int main() { /*#define 与 typedef区别*/ typedef int* INT_T; typedef char CHAR_T; INT_T a,b; // a.b都为int型指针 INT_D c,d; // c为int型指针.d为int整型 unsigned CHAR_D e; // #defi

define与typedef

#define与typedef有相似之处,但二者有本质区别 1 #define INTEGER int 和 typedef int INTEGER; 程序中INTEGER都可当做int使用,前者是预处理的宏代换,将程序中所有INTEGER先替换为int再进行编译,并没有产生新的名字:而后者是为int取了一个新的别名. 1 typerdef struct 2 { 3 int num; 4 char count; 5 }STUDENT;//STUDENT 是类型别名,注意它与直接定义结构体变量的区别

void指针意义、Const、volatile、#define、typedef、接续符

1.C语言规定只有相同类型的指针才可以相互赋值. Void*指针作为左值用于接收任意类型的指针, void*指针作为右值赋给其他指针时需要强制类型转换. 2.在C语言中Const修饰的变量是只读的,本质还是变量. 口诀:左数右指  不可改变: 当Const出现在*号左边时,指针指向的数据为常量. 当Const出现在*号右边时,指针本身为常量. const int* p ; //P可变,P指向的内容不可变 int const * p; //跟上一句一样 int *const p; //p不可变,p

宏定义 #define 和常量 const 的区别

宏定义 #define 和常量 const 的区别 类型和安全检查不同 宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误: const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查 编译器处理不同 宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束与编译时期: const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据 存储方式不同 宏定义是直接替换,不会分配内存,存储与

define和typedef区别

一.起作用的时间不同 typedef在编译阶段起作用,因此有类型检查的功能. define在预处理阶段起作用(编译之前),只进行简单的字符串替换而不进行类型检查. 二.功能不同 typedef (1)用来定义类型的别名 (2)定义机器无关的类型 (例如定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL; 那么在不支持 long double 的机器上,该 typedef 看起来会是下面这样:typedef double REAL;

define与typedef 区别

1)     #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错.例如:#define PI 3.1415926程序中的:area=PI*r*r 会替换为3.1415926*r*r如果你把#define语句中的数字9 写成字母g 预处理也照样带入. 2)typedef是在编译时处理的.它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef spe