奇怪!一个结构体在keil3或keil4下,不能编译通过?

[复制链接]
10757|24
 楼主| 江陵龙少 发表于 2012-3-6 13:35 | 显示全部楼层 |阅读模式
本帖最后由 江陵龙少 于 2012-3-6 13:38 编辑

struct {
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         }SDHSlot;

SDHSlot.TUG3=1;

最后一条赋值语句就是不行啊,编译到它就通不过,

compiling main.c...
..\main.c(38): error:  #77-D: this declaration has no storage class or type specifier
..\main.c(38): error:  #147: declaration is incompatible with "struct SDH SDHSlot" (declared at line 36)
..\main.c(38): error:  #65: expected a ";"
..\main.c - 3 Error(s), 1 Warning(s).
mohanwei 发表于 2012-3-6 13:41 | 显示全部楼层
typedef  struct {
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         }SDHSlotStruct;
SDHSlotStruct SDHSlot;
SDHSlot.TUG3=1;
 楼主| 江陵龙少 发表于 2012-3-6 13:53 | 显示全部楼层
楼上的也是不行的
我刚开始也是使用typedef来先定义类型,结果不行,
才想用简单的方式试试,也不行,真不知怎么搞的
 楼主| 江陵龙少 发表于 2012-3-6 13:58 | 显示全部楼层
就是那一条赋值语句出问题,
sunmonth 发表于 2012-3-6 14:21 | 显示全部楼层
1# 江陵龙少
服了你了!
你没定义变量,如何赋值?给谁赋值?结构体只不过你定义的一个类型,不是变量。
 楼主| 江陵龙少 发表于 2012-3-6 14:24 | 显示全部楼层
struct {
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         }SDHSlot;

这个不是变量,是什么?
sunmonth 发表于 2012-3-6 14:25 | 显示全部楼层
本帖最后由 sunmonth 于 2012-3-6 14:38 编辑

ee
sunmonth 发表于 2012-3-6 14:26 | 显示全部楼层
本帖最后由 sunmonth 于 2012-3-6 14:39 编辑

rr
dami 发表于 2012-3-6 14:26 | 显示全部楼层
也许是你编辑的时候出问题了。
删除后重新编辑看看。
午夜霓虹 发表于 2012-3-6 14:33 | 显示全部楼层
这么写没问题的,你找找别处的原因。呵呵
香水城 发表于 2012-3-6 16:30 | 显示全部楼层
试试给结构一个名字:
struct SDH { // 这应该是标准C的写法
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         } SDHSlot;
zleis 发表于 2012-3-6 17:01 | 显示全部楼层
编译器是机器
他说哪里错并不一定是那里出错
nongfuxu 发表于 2012-3-6 17:41 | 显示全部楼层
struct SDH { // 这应该是标准C的写法
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         } SDHSlot;

是不是keil3或keil4只认"真爸",不认"干爹"?
西门看雪 发表于 2012-3-6 19:09 | 显示全部楼层
本帖最后由 西门看雪 于 2012-3-6 19:16 编辑

1# 江陵龙少

靠,I 服了 U;有谁见过像你这样子初始化一个结构体变量的么?

正确的做法是:

struct {
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         }SDHSlot = {0,0,1};

或者:

struct {
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         }SDHSlot;

void main(void)
{
SDHSlot.TUG3=1;
    …… ……
}

尼玛"SDHSlot.TUG3=1;"是一条C语言语句;一条C语言语句呀!有谁见过一条C语言语句放在函数体外边能够被执行的?要是编译器不报错的的话,那个编译器就是神了。
EWB5 发表于 2012-3-6 20:45 | 显示全部楼层
结构体在C和C++中有差别的,建议你看看编译器的选项,而且你那个好像没有变量吧。。。。。
yytdragon 发表于 2012-3-6 21:15 | 显示全部楼层
本帖最后由 yytdragon 于 2012-3-6 21:20 编辑

typedef unsigned char u8;
typedef unsigned int u16;
  struct
   {
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
          }SDHSlot;
void main(void)
{
SDHSlot.TUG3 = 1;
while(1)
  {
;
}
}

这么写是可以的

但是如果

typedef unsigned char u8;
typedef unsigned int u16;
typedef  struct
           {
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
          }SDHSlot;
void main(void)
{
SDHSlot.TUG3 = 1;
while(1)
  {
;
}

是不行的

下面的这种要这么写才行

typedef unsigned char u8;
typedef unsigned int u16;
typedef struct
   {
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
          }SDHSlot;
void main(void)
{
SDHSlot SDH;
SDH.TUG3 = 1;
while(1)
  {
;
}
}



}
王紫豪 发表于 2012-3-7 01:12 | 显示全部楼层
遇到这种问题,就用 c99特性的结构体复赋值吧
HORSE7812 发表于 2012-3-7 01:30 | 显示全部楼层
学习了!
junming6385 发表于 2012-3-7 08:47 | 显示全部楼层
同意17楼!
柳江蔗农 发表于 2012-3-7 09:09 | 显示全部楼层
:lol去翻书看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:佩服2个头陀:苦头陀和伙工头陀

85

主题

286

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部