#define与typedef定义的类型名的区别

1、可以用其他类型说明符对#define定义的类型名进行扩展,但对typedef所定义的类型名不能这样做。

  例如:

  #define peach int

  unsigned peach i;  //加上unsigned类型说明符,正确!

  typedef int banana;

  unsigned banana i;  //加上unsigned类型说明符,错误!

2、在连续的变量声明中,用typedef定义的类型能够保证声明中的所有变量均为同一种类型,而用#define定义的类型则无法保证。

  例如:

  #define int_ptr int *

  int_ptr chalk,cheese;

  经过宏扩展,第二行变为:

  int * chalk,cheese;

  这使得chalk和cheese成为不同的类型:chalk是一个指向int的指针,而cheese则是一个int。

  相反,下面的代码中:

  typedef char * char_ptr;

  char_ptr Bentley,Rolls_Royce;

  Bentley和Rolls_Royce的类型依然相同。虽然前面的类型名变了,但他们的类型相同,都是指向char的指针。

                                                ——摘自《C专家编程》

时间: 2024-12-29 11:18:48

#define与typedef定义的类型名的区别的相关文章

关于typedef声明新类型名

typedef作用是用简单的类型名代替复杂的类型名,这样易于理解,方便表示.如 typedef int Integer 指定Integer为类型名,作用于int 相同 Integer i 与 int i 等价. 复杂点的情况是定义函数指针,如 typedef void (*fun)(void) 表示用户自己定义了一个函数指针数据类型,fun ptr,即定义了一个函数指针ptr,可将函数地址赋给该指针,如 ptr=File; (File为一函数,函数名即地址,File()的入口地址赋给ptr,以后

typedef定义函数类型或函数指针

转载请标明出处: 最近在看redis的代码,发现了有关函数指针的部分,想把它记下来. 在redis中有类似下面的定义,利用typedef 定义了一个新的类型,这种类型是一个函数: typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask); 然后可以用这个类型定义一个指针,这个指针指向一个函数,具体redis中使用如下(具体redis的源码解析,后面的文章中还会提到): ae

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

使用typedef语句定义数组类型

使用typedef语句定义数组类型     1. 一维数组类型的定义格式 typedef <元素类型关键字><数组类型名>[<常量表达式>]; 例如: (1) typedef int vector[10]; (2) typedef char strings[80]; (3) typedef short int array[N]; 第一条语句定义了一个元素类型为int,含有10个元素的数组类型vector,若不使用typedef保留字,则就变成了数组定义,它只定义了一个元

类型别名(define与typedef)

#define NEW OLD //使用预处理器的方法,为OLD定义一个新名称NEW,使用define定义的类型别名,会在预处理的过程中对NEW进行“单纯”的替换,例如: #define N 3+2 int i = N * 2; //预处理后,将会变成 int i = 3 + 2 * 2; //i 的结果将会是7 typedef typeName aliasName; //使用关键字typedef来创建别名,typedef不会创建新的类型,而只是为已知类型创建一个新名称. 两者比较: typed

用typedef定义函数指针类型(转)

typedef可以用于定义函数指针类型: [语法]typedef <返回类型> (*<函数类型名>)(参数表)typedef <返回类型> (<类名>::*<函数类型名>)(参数表) [用途]1.可以用来定义该函数类型的函数指针,就不用每次使用函数指针都要写一次函数原型了:2.有了类型名,就可以使用在容器里面,譬如map<int, 类型名>,用于实现灵活的函数调用. [示例] 例1:typedef void (*PF)(int x);

c语言之使用typedef定义类型

可以用typedef声明新的类型名来代替已有的类型名. 实例1: #include<stdio.h> #include<iostream> typedef struct { char* name; int age; }STUDENT; int main() { STUDENT stu; stu.name = "tom"; stu.age = 12; printf("name=%s,age=%d\n", stu.name, stu.age);

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 是类型别名,注意它与直接定义结构体变量的区别

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

/* ============================================================================ Name : TestDefine.c Author : lf Version : Copyright : Your copyright notice Description : #define和typedef的简单区别及使用 1 两者执行时间的差异 #define是宏定义,发生在预处理阶段,即编译之前. 它只进行简单而机械的替换,而不进