打印
[51单片机]

Keil C51下的结构体嵌套赋值问题,结构体元素还是结构体名?

[复制链接]
3176|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
soulmist|  楼主 | 2016-12-15 09:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我用两个简单的结构体来表示下这个问题。
typedef struct _inner_ {
            int c;
            int d;
}inner;
typedef struct  _external_ {
            int a;
            inner what;
}external;
//然后初始化
inner strb = { 12, 34};
external stra = {1,{ 12, 34}}; //这样子编译不报错   ①
//external stra = {1,strb};//这样子报错  error C215: illegal type conversion ②
我使用gcc这样实验的时候可以使用第二种方案。请问一下是不是Keil C不支持这种方式呢? ANSI标准应该来说是可以使用同样类型的结构体名直接给对应的结构体赋值的呀。

相关帖子

沙发
soulmist|  楼主 | 2016-12-15 09:46 | 只看该作者
还是我自己顶一顶吧!

使用特权

评论回复
板凳
冰零分子| | 2016-12-15 10:20 | 只看该作者
集合的初始化需要使用{}
不在初始化里使用就可以了
这样:
external stra;
stra.what = strb;

使用特权

评论回复
地板
soulmist|  楼主 | 2016-12-16 09:33 | 只看该作者
冰零分子 发表于 2016-12-15 10:20
集合的初始化需要使用{}
不在初始化里使用就可以了
这样:

谢谢你的解答,好像gcc中可以这么干,这是gcc的特性么?

使用特权

评论回复
5
冰零分子| | 2016-12-16 11:28 | 只看该作者
soulmist 发表于 2016-12-16 09:33
谢谢你的解答,好像gcc中可以这么干,这是gcc的特性么?

我试了下gcc同样报错了


还是走最保险的路线把,怎么定义都无所谓,精力不应该花在这上面

使用特权

评论回复
6
soulmist|  楼主 | 2016-12-19 09:05 | 只看该作者
本帖最后由 soulmist 于 2016-12-19 09:07 编辑
冰零分子 发表于 2016-12-16 11:28
我试了下gcc同样报错了

我的版本gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
我的编译通过。
我的怎么可以啊?


不是纠结这个问题, 只是有点好奇。。

NJL25X0ZNJX{_]TUSDGSQ7L.png (30.26 KB )

代码

代码

V82JFULS9MY(37GIG__KZWN.png (15.12 KB )

编译执行

编译执行

使用特权

评论回复
7
冰零分子| | 2016-12-19 09:51 | 只看该作者
你已经有答案了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

122

帖子

0

粉丝