宏定义陷阱与typedef

#define int_ptr  int*

int_ptr  point1,point2;

经预处理后,第二行变为 int * point1,point2.

这就意味着,point1 是一个指向int的指针,但是 point2却是 int类型的了

所以,宏定义的连续变量的定义中 ,不能保证所有的变量为同一样的类型!!

typedef不同,他可以保证连续性。

typedef char * String

String str1,str2;

--------------------------------------------------------------------------------------------

另外:

#define INT int

unsigned INT number;

这句话是没有问题。

但是:

typedef int INT

unsigned INT number;

这就是错误操作!

时间: 2024-10-22 21:26:24

宏定义陷阱与typedef的相关文章

宏定义 #define与typedef的区别。

#include <stdio.h> #define TP1 char* typedef char*  TP2; int main(void){    TP1 a,b;    TP2 x,y; printf("a=>%d,b=>%d\n",sizeof(a),sizeof(b));    printf("x=>%d,y=>%d\n",sizeof(x),sizeof(y));

typedef与define宏定义用于声明新的类型之间的区别

摘自<c专家编程> typedef可以看成一种彻底的封装类型,在typedef声明类型之后不能再往里面增加其他的内容. 例子: #define peach int unsigned peach i; //没问题 typedef int banana; unsigned banana i; //错误,不能增加unsigned #define宏定义只是用于简单的替换 #define int_ptr int * int_ptr chalk, cheese; int * chalk, cheese;

typedef 类型重命名 和 #define 宏定义(1)

http://www.blogjava.net/jasmine214--love/archive/2010/11/29/339307.html 在现实生活中,信息的概念可能是长度,数量和面积等.在C语言中,信息被抽象为int.float和double等基本数据类型.从基本数据类型名称上, 不能够看出其所代表的物理属性,并且int.float和double为系统关键字,不可以修改.为了解决用户自定义数据类型名称的需求,C语言中引入类 型重定义语句typedef,可以为数据类型定义新的类型名称,从而

c++ 宏定义和typedef初步认识

宏: #define MAX(x,y) (((x) < (y)) ? (y) : (x)) 函数型: #define CREATE_FUNC(__TYPE__) static __TYPE__* create() { __TYPE__ *pRet = new __TYPE__(); if (pRet && pRet->init()) { pRet->autorelease(); return pRet; } else { delete pRet; pRet = NULL;

#define 宏定义 与 typedef 类型定义

一 #define 宏定义 1. 宏基本定义 #define 宏名 宏定义字符串 # 表示它在预编译处理中起作用,而不是真正的 C 语句,行尾无须跟分号,如果加了分号,分号作为宏定义的一部分. 宏名常采用大写字母,宏名与定义字符串间用空格分隔,所以宏名之间不能有空格. 宏定义字符串是宏名对应的具体实现过程,可以是任意字符串,中间可以有空格,以回车符作为结束. 栗子:#define PI 3.1415926 宏的用途: 1)符号常量,如PI.数组大小定义,以增加程序的灵活性 2)简单地函数功能实现

linux C宏定义 转

写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等.下面列举一些成熟软件中常用得宏定义...... 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植. typedef  unsigned char      boolean;     /* Boolean value type. */ typed

转载--c语言宏定义(2)

作者:独舞风 链接:c语言宏定义(2) 1.如何区分宏定义中的“宏名称”和“宏字符串”?对于带参数的宏又该注意什么? 在宏定义中,“宏名称”和“宏字符串”是通过“空格”来区分的,在宏的扩展中,空格会对扩展的结果造成很大的影响.编译器在处理时宏定义时,首先从“#define”后第一个空格开始读取字符串,直到遇见下一个空格为止,两个空格之间的字符串为“宏名称”,确定好“宏名称”之后,本行的所有其他字符串都为“宏字符串”.图示:#define + N个空格(1 < N) + 宏名称(中间没有空格) +

C语言宏定义使用技巧

写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等.下面列举一些成熟软件中常用得宏定义...... 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植. typedef  unsigned char      boolean;     /* Boolean value type. */ type

C Program基础-宏定义

写好c语言,漂亮的宏定义是非常重要的,我们在阅读别人工程时,往往能看到大量的宏定义,宏定义可以增加代码的可读性,也能增加代码的可移植性,一个好的宏定义甚至是一件艺术品.今天我们就来看看宏定义的方方面面. (一) 宏 vs 函数 在软件开发中过程中,经常有很多重复使用的代码段或功能模块,这些功能既可以用函数实现,也可以用宏实现,那么究竟是用函数好还是宏定义好呢?这就要求我们对二者做合理的取舍. 我们来看下面的例子,求两个数的较大者: (1)宏定义: #define Max(a, b) ((a) >