typedef和define的区别与用法,C语言type 与 #define 定义区别
typedef和define的区别与用法,C语言type 与 #define 定义区别详细介绍
本文目录一览: typedef和define具体的详细区别
#define是编译预处理指令,在编译预处理时换,不作正确性检查,不论是否正确只进行带入替换,只有在编译已被展开的源程序时才会发现可能的错误并报错。
2.typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。
两者的区别如例:
#define A int * tepedef int * A;(这是一条语句,要加分号)
两者的作用都是将A代表int *,但是#define在预处理时进行简单的替换,而typedef不是简单替换。
typedef定义的A相当于定义了一个指针指向了int *。而#define定义的A只是进行了替换。
扩展资料:
typedef 有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:
typedef long double REAL;
在不支持 long double 的机器上,该 typedef 看起来会是下面这样:
typedef double REAL;
并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样:
typedef float REAL;
你不用对源代码做任何修改,便可以在每一种平台上编译这个使用 REAL 类型的应用程序。唯一要改的是 typedef 本身。在大多数情况下,甚至这个微小的变动完全都可以通过奇妙的条件编译来自动实现。不是吗? 标准库广泛地使用 typedef 来创建这样的平台无关类型:size_t,ptrdiff 和 fpos_t 就是其中的例子。此外,象 std::string 和 std::ofstream 这样的 typedef 还隐藏了长长的,难以理解的模板特化语法,例如:basic_string,allocator> 和 basic_ofstream>。
参考资料:typedef-百度百科
C语言中“define”和“typedef”有什么区别?
1)#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:\x0d\x0a#definePI3.1415926\x0d\x0a程序中的:area=PI*r*r会替换为3.1415926*r*r\x0d\x0a如果你把#define语句中的数字9写成字母g预处理也照样带入。\x0d\x0a\x0d\x0a2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是Youcannotusethetypedefspecifierinsideafunctiondefinition。\x0d\x0a\x0d\x0a3)typedefint*int_ptr;\x0d\x0a与\x0d\x0a#defineint_ptrint*\x0d\x0a作用都是用int_ptr代表int*,但是二者不同,正如前面所说,#define在预处理时进行简单的替换,而typedef不是简单替换,而是采用如同定义变量的方法那样来声明一种类型。也就是说;\x0d\x0a\x0d\x0a//referto(xzgyb(老达摩))\x0d\x0a#defineint_ptrint*\x0d\x0aint_ptra,b;//相当于int*a,b;只是简单的宏替换\x0d\x0a\x0d\x0atypedefint*int_ptr;\x0d\x0aint_ptra,b;//a,b都为指向int的指针,typedef为int*引入了一个新的助记符\x0d\x0a\x0d\x0a这也说明了为什么下面观点成立\x0d\x0a//QunKangLi(维护成本与程序员的创造力的平方成正比)\x0d\x0atypedefint*pint;\x0d\x0a#definePINTint*\x0d\x0a\x0d\x0a那么:\x0d\x0aconstpintp;//p不可更改,但p指向的内容可更改\x0d\x0aconstPINTp;//p可更改,但是p指向的内容不可更改。\x0d\x0a\x0d\x0apint是一种指针类型constpintp就是把指针给锁住了p不可更改\x0d\x0a而constPINTp是constint*p锁的是指针p所指的对象。\x0d\x0a\x0d\x0a3)也许您已经注意到#define不是语句不要在行末加分号,否则会连分号一块置换。
#define,typedef,sbit三个关键字分别是什么意思,举例说明?
#define,typedef,sbit三个关键字分别是什么意思,举例说明?
define是宏定义,就是替换的意思,他定义的是集合,是整个IO口
typedef就是对数据类型的代替,如typedef unsigned int u32就是用u32代替无符号型整数,使用时就是u32 变量,就可以了。
sbit是特殊功能寄存器的一个位声明,如,sbit led P2∧0,定义的是具体的位变量。
C语言type 与 #define 定义区别
#define是定义一个文本宏
之后文件中有同名宏出现的地方会被替换为#define的内容
#if可以用来检测某个特定宏是否被定义,也可以做一些基本的数值判断,作用一般是用来根据特性条件进行条件性编译。
给你写个例子
#include
#define
a
1
int
main()
{
#if
a
>
2
printf("%d
>
2",
a);
#else
printf("%d
<=
2",
a);
#endif
}
typedef和宏它们针对的软件都不一样.
宏是预处理器的任务,
比如说:#define
A
10,
预处理器在读取这行后,
它会把程序以后的所有大写字母A都替换成10(需要全字匹配).
我们写的代码必须通过预处理器处理后,
才会被编译器编译.
而typedef是针对的编译器,
不是预处理器的任务.
编译器读取typedef
unsigned
int
UINT;后,
它会在以后的代码中,
认为UINT就是unsigned
int,
也就是说对编译器来讲又多了一种数据类型,
但是这种数据类型和unsigned
int是一样的.
宏定义只是简单的字符串代换,是在预处理完成的,而typedef是在编译时处理的,它不是作简单的代换,而是对类型说明符重新命名。被命名的标识符具有类型定义说明的功能。
#define
PIN1
int
*
typedef
(int
*)
PIN2;
从形式上看这两者相似,
但在实际使用中却不相同。
下面用PIN1,PIN2说明变量时就可以看出它们的区别:
PIN1
a,b;在宏代换后变成:
int
*a,b;
表示a是指向整型的指针变量,而b是整型变量。
然而:
PIN2
a,b;
表示a,b都是指向整型的指针变量。因为PIN2是一个类型说明符。由这个例子可见,宏定义虽然也可表示数据类型,
但毕竟是作字符代换。在使用时要分外小心,以避出错。
define和typedefine有什么区别?
区别:define只是简单的替换,而tpyedef 是一种类型定义\r\n有 #define DEFPCHAR char*\r\n typedef char* TPYEPCHAR;\r\n如果 DEFPCHAR a, b;\r\n那么是直接展开宏为 char* a, b;//a为char*型,b是为char型\r\n如果是TPYEPCHAR a, b;\r\n那么类型定义的结果为 char*a, *b;//同为char*型\r\n明白了么
#define a int[1 0]与 typedef int a[10] 有什么区别?怎么用他们?
对于define,
如果代码里有int abc;
就会变成 int int[1 0]bc,而报错。
对于typedef,
int abc还是int abc。 a b; 就是int b[10]的意思。
不可以定义#define a int[10],,,int是关键词,不能做变量。。。
最好都不用,都不是理想的方式,容易照成混淆
#define a int[10] 属于宏定义,在编译的时候只进行替换,而不进行类型检查;
typedef int a[10] 只不过给int型取个别名,在编译的时候会进行类型检查。
PS:宏定义在编程中不推荐使用,还有typedef int a[10] 这句很容易让人误解,最好不要这样用
C语言中的#define与typedef有和区别;static与extern定义有和区别?
1) typedef与#define的区别
从以上的概念便也能基本清楚,typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量
,到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与typedef两者到底该用哪个好,如#define
INT int这样的语句,用typedef一样可以完成,用哪个好呢?我主张用typedef,因为在早期的许多C编译器中这条语句是非法的,只是现今的
编译器又做了扩充。为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗
长的类型的别名。
宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变
量的功能。请看上面第一大点代码的第三行:
typedef (int*) pINT;
以及下面这行:
#define pINT2 int*
效果相同?实则不同!实践中见差别:pINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;的效果同int *a, b;
表示定义了一个整型指针变量a和整型变量b。
注意:两者还有一个行尾;号的区别哦!
2)static和extern的区别
extern int a;
说明 a 是在另外一个文件中定义的变量
这是声明,不是定义。
static int a;
定义静态变量 a.
两者的作用域不一样
单片机中宏定义与重新定义数据类型(typedef)区别,并且各自的优势(初学单片机)
#define只是简单的字符串替换而typedef则是为一个类型起新名字。
我们提倡使用后者。
1) #define宏定义有一个特别的长处:可以使用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
2) typedef也有一个特别的长处:它符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。
3)typedef比#define更安全。举个例子:
typedef char* pStr1;
#define pStr2 char *
pStr1 s1, s2;
pStr2 s3, s4;
在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。