C语言typedef和#define
typedef int B
A a,b;
B c,d;
以上有错误吗,或者是否存在问题?若有错指出。
有错误,第一行为宏定义,A放在int后,不加分号,第二行正确,表示B=int
我怎么记得A放在int 前呢
第一行宏定义错误 区分一下#define与typedef
分享是一种美德
有错,#define A int宏定义,不能直接拿来定义变量
原则上不会这么宏定义,两者的语法都没错,编译器并不会报错.但是不建议这么做,没什么实际意义其实。你要取个有辨识度的定义名啊,比如这样U8的定义,
typedef unsigned char U8;
11111111111111111111111111111111111111111111111111111
第二行加分号。说第一行有错的,该去看看C语言了。
水平有限哈!貌似两种都可以,就是少了个分号。
第一行错了,#define是宏定义,定义常量的,不能定义int关键字
两个应该都没什么问题
第一个是对的,我现在写单片机就经常用到
#define uchar unsigned char
第二个应该也没问题,根据我对下面百度内容的理解。
——
typedef是C/C++的一个关键字,其功能是定义一个新的自定义类型。形式为
typedef OLD_TYPE NEW_TYPE
也就是给OLD_TYPE起一个别名,起到简化代码的作用。
在这里,typedef int *p; 其实是
typedef int* p;
即int*是一体的,而p是新类型的名字。
在如此定义后,p就等同于int *的效果
使用上确实只是少个分号;规范上讲就如同12楼所说的别名与类型的问题了
typedef是C语言中的一个关键字,作用是对已存在的数据类型重命名,但是并没有产生新的数据类型。#define宏定义的话就是最简单最直观的替换,在预编译阶段就完成了的。这里引用别人的一个例子说一下区别。
#define PCHAR char *
PHCAR p3,p4;
typedef char * pchar
pchar p1,p2;
在这里p4不是指针,仅仅是一个char类型的字符。 引自《C语言深度剖析》第二版P48
typedef 用来对寄存器进行定义,面向的对象是寄存器,define是宏定义,用一个标识符代替一个常量或表达式
小编应该选择一个答案来了
搬个凳子来学习
第二行加分号,#define是预编译,凡是碰到A就用int 替换,相当于把int复制到那,在编译前做的这一步。
typedef 是编译阶段发生的,做一个新的数据类型。
这个百度一下,就有很多的文章。
以下内容复制过来给你看看:
typedef和#define的用法与区别
一、typedef的用法
在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:
typedef int INT;
typedef int ARRAY[10];
typedef (int*) pINT;
typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。
二、#define的用法
#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编
译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题,它的实例像:
#define INT int
#define TRUE 1
#define Add(a,b) ((a)+(b));
#define Loop_10 for (int i=0; i<10; i++)
在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析,以及好的替代方法,大家可参看。
三、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。
