野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12048|回复: 9

keil中的C语言

[复制链接]
发表于 2017-4-29 22:24:09 | 显示全部楼层 |阅读模式
#define  LC  {1,2,3}
typedef struct A1

int a;
int b;
int c;
}A
void main()

    A abc= (A)LC;//这样是可以的

  //但是这样却不行
   A abc;
  abc  = (A)LC;//会被报错;



回复

使用道具 举报

 楼主| 发表于 2017-4-29 22:24:41 | 显示全部楼层

#define  LC  {1,2,3}
typedef struct A1

int a;
int b;
int c;
}A
void main()

    A abc= (A)LC;//这样是可以的

  //但是这样却不行
   A abc;
  abc  = (A)LC;//会被报错;
回复 支持 反对

使用道具 举报

发表于 2017-5-1 02:10:53 | 显示全部楼层
然后呢,报的什么错都不给我们说,咋个帮得到你呢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-1 17:42:16 | 显示全部楼层
喵爱小鱼鱼 发表于 2017-5-1 02:10
然后呢,报的什么错都不给我们说,咋个帮得到你呢。

不允许类型转化
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-1 17:43:25 | 显示全部楼层
陈浪 发表于 2017-5-1 17:42
不允许类型转化

提示 不允许类型转化
回复 支持 反对

使用道具 举报

发表于 2017-5-3 00:51:06 | 显示全部楼层
陈浪 发表于 2017-5-1 17:43
提示 不允许类型转化

你的LC是宏,IDE在的预处理过程中就对所有的宏进行替换,于是,你最下面的代码就变成了:
abc = (A){1,2,3};
这样就不对了,懂不懂。大括号()做强制类型转换时其右边必须是某种类型(包括基本数据类型和自定义结构体类型),那么你说{1,2,3}这是个什么类型。
再说为什么上面行,有两种情况。一、在定义结构体变量abc时候默认为赋初值(我也不确定正确)二、编译器检测到不和逻辑或者是语法错后只显示了下面的语句错误而没有显示到上面(这是IDE的原因),于是让你误认为上面的行,下面的不行。
分析到这吧。建议你使用规范的C语言编程风格。
祝你进步!!
回复 支持 反对

使用道具 举报

发表于 2017-5-5 09:20:04 | 显示全部楼层
第一次见这种写法,不懂
回复 支持 反对

使用道具 举报

发表于 2017-5-5 09:34:36 | 显示全部楼层
一般KEIL中对结构体赋值有自己的方式,这种赋值方式我还是第一次见。
回复 支持 反对

使用道具 举报

发表于 2017-5-6 17:52:45 | 显示全部楼层
666  想创新写法呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-11 22:58:48 | 显示全部楼层
liutao 发表于 2017-5-5 09:20
第一次见这种写法,不懂

C 里面是可以的 我试过了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-16 01:13 , Processed in 0.035646 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表