请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/04 17:43:43
请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,

请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,
请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,
请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,

请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,
就是一个宏定义,即后面的KEY0将全部用 后面的这一串代替:“(GPIOD->IDR&GPIO_Pin_0)

所以,下面的语句
if KEY0
   printf("Stop");
经过预编译后就变成了:
if (GPIOD->IDR&GPIO_Pin_0)
   printf("Stop");
所以使用宏定义后如果编译出错,你又看不出来的话,需要你仔细你的宏定义是否正确定义且被正确地使用.
其中的"->"是表示访问结构指针对应对象下的IDR成员,可以改写为“(*GPIOD).IDR".
也就是说,如果GPIOD不是一个指针变量,或者不是指向拥有IDR成员的结构对象则编译就会出错;而如果对某个指针进行强制转换后编译成功了并不一定保证执行不会出错.比如:
void *ptr=.../*某个结构对象的地址,但该结构没有IDR成员*/;
(struct stru_name_with_IDR*)ptr->IDR=./*对ptr强制转换以便对其中的IDR成员进行操作*/;
上述两句编译时不会报错,因为使用强制转换,编译器认为你是了解你的目的的,但运行中可能出错,比如ptr指向的对象尺寸不够就会越界,其他的错误取决于IDR的类型等.
不知道这样说清楚了没?