#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-23 23:03:24

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

C语言中define与const的用法区别分析

题目:  代码如下 复制代码 #define N 2 #define M N+1 #define NUM 2*M+1 main( ) { int i; for(i=1;i<=NUM;i++) printf("%dn",i); } 该程序中的for循环执行的次数是( ) A) 5 B) 6 C) 7 D) 8 答案是6,跑过以后怎么都不理解,这是因为忽略了#define的重大不同. #define进行的其实是简单的代入, 换句话说,NUM去找了M的表达式,把M的表达式代入,得出2*

【理解Docker】Docker与Vagrant的简单区别

本文讲的是[理解Docker]Docker与Vagrant的简单区别,[编者的话]本文翻译自Quora上的一个问题:Docker和Vagrant的区别,以及我们何时使用他们. Vagrant和Docker是两只不同的野兽. Docker是一个由shell层和management层两部分组成的,用来构建并运行基于lxc的虚拟Linux容器. Docker的伟大在于:它是轻量级的(因为它依赖于共享内核的Linux容器),[以及与它的分布无关].虽然所有实例之间的内核共享(但与主机以及互相之间都是隔离

c c++-关于#define和typedef的使用?

问题描述 关于#define和typedef的使用? 最近在看微软某个SDK源码,看到一段宏定义之类的,实在没看懂,这段代码如下:#define CREATE_BRICK_SOURCE(NAME TPL_BRICK CONTEXT NEXT_BRICK) typedef TPL_BRICKC_##NAME; typedef __C_##NAME *S_##NAME; S_##NAME NAME(aligned_new(C_##NAME CONTEXT NEXT_BRICK)); 求大神解释解释该

gVim, gVim Easy, gVim Read-only 的简单区别_相关技巧

我在Window XP中安装了Gvim7.2,然后桌面上出现了三个快捷方式,gvim72.exe,gvim read-only,gvim easy,大家谁比较熟悉介绍一下啊,谢谢了! 第一个应该是正常模式,第二个是只读模式,第三个是简单模式, gvim72.exe 正常模式标准的VIM(正常开发的时候用) gvim read-only 只读模式的VIM(防误删误改方便查阅代码) gvim easy 启动的时候是insert模式,适合普通windows用户的习惯: gVim, gVim Diff,

C及C++中typedef的简单使用介绍_C 语言

typedef 声明,简称 typedef,为现有类型创建一个新的名字.比如人们常常使用 typedef 来编写更美观和可读的代码.所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性. 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明. 又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++

【理解Docker】Docker与VirtualBox的简单区别

本文讲的是[理解Docker]Docker与VirtualBox的简单区别,[编者的话]本文翻译自Quora上的一个问题:VirtualBox和Docker的区别,一句话总结就是VirtualBox虚拟化硬件,Docker虚拟化操作系统. VirtualBox,是创建硬件虚拟化的软件.通常情况下,一个操作系统运行在硬件上,其中硬件和操作系统之间的通信是通过移动数据到内存地址,然后发出指令来通知可使用该数据的硬件(或者是数据在被读取时). 在VirtualBox(或其它虚拟机)设置的环境中,那些内

#define和typedef的区别

typedef和#define都是替一个对象取一个别名,来增强程序的可读性,但是它们有以下几个区别 1. 原理不同    (1)#define是C语言中定义的语法,它是预处理指令,在预处理的时候进行简单的字符串替换,不作任何的正确性的检查,不管是否正确照样带入替换,只有在编译的时候才会发现错误并报错    (2)typedef是关键字,在编译的时候处理,所以typedef是有类型检查的功能,在作用域内给类型定一个别名 2. 功能不同.    (1)typedef用来定义类型的别名,这些类型包括内

C语言中#define与typedef的互换细节详解_C 语言

复制代码 代码如下: #include <stdio.h>/*<---------           #define    string    char *            ---->*/typedef   char *   string;       int main(void){   string   a[] = {"I", "like", "to", "fight,"},   b[] =

简单区别photoshop的灰度、索引、RGB 、CMYK四个模式

  最开始学做网页的时候,就不小心用了CMYK模式的图片,然后在浏览器上打开是X,后来找了好久的原因才知道原来网页要用RGB模式,现在我们来简单分别photoshop的灰度.索引.RGB .CMYK四个模式. 灰度模式 :简单点说灰度模式就像黑白照片,所有颜色都是用不同的256种灰度表现(所以在灰度模式下填充其它彩色颜色,默认会用相关的灰度色替代填充!) 索引模式 :做网页时,索引颜色的文件一般是GIF格式(保存成GIF格式的图片,会自动转成索引模式,必须转成RGB模式才能编辑图片),而RGB模