打印

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

[复制链接]
8884|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 | 只看该作者
就是那一条赋值语句出问题,

使用特权

评论回复
5
sunmonth| | 2012-3-6 14:21 | 只看该作者
1# 江陵龙少
服了你了!
你没定义变量,如何赋值?给谁赋值?结构体只不过你定义的一个类型,不是变量。

使用特权

评论回复
6
江陵龙少|  楼主 | 2012-3-6 14:24 | 只看该作者
struct {
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         }SDHSlot;

这个不是变量,是什么?

使用特权

评论回复
7
sunmonth| | 2012-3-6 14:25 | 只看该作者
本帖最后由 sunmonth 于 2012-3-6 14:38 编辑

ee

使用特权

评论回复
8
sunmonth| | 2012-3-6 14:26 | 只看该作者
本帖最后由 sunmonth 于 2012-3-6 14:39 编辑

rr

使用特权

评论回复
9
dami| | 2012-3-6 14:26 | 只看该作者
也许是你编辑的时候出问题了。
删除后重新编辑看看。

使用特权

评论回复
10
午夜霓虹| | 2012-3-6 14:33 | 只看该作者
这么写没问题的,你找找别处的原因。呵呵

使用特权

评论回复
11
香水城| | 2012-3-6 16:30 | 只看该作者
试试给结构一个名字:
struct SDH { // 这应该是标准C的写法
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         } SDHSlot;

使用特权

评论回复
12
zleis| | 2012-3-6 17:01 | 只看该作者
编译器是机器
他说哪里错并不一定是那里出错

使用特权

评论回复
13
nongfuxu| | 2012-3-6 17:41 | 只看该作者
struct SDH { // 这应该是标准C的写法
            u8 TUG3;
            u8 TUG2;
            u8 TUG12;
         } SDHSlot;

是不是keil3或keil4只认"真爸",不认"干爹"?

使用特权

评论回复
14
西门看雪| | 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语言语句放在函数体外边能够被执行的?要是编译器不报错的的话,那个编译器就是神了。

使用特权

评论回复
15
EWB5| | 2012-3-6 20:45 | 只看该作者
结构体在C和C++中有差别的,建议你看看编译器的选项,而且你那个好像没有变量吧。。。。。

使用特权

评论回复
16
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)
  {
;
}
}



}

使用特权

评论回复
17
王紫豪| | 2012-3-7 01:12 | 只看该作者
遇到这种问题,就用 c99特性的结构体复赋值吧

使用特权

评论回复
18
HORSE7812| | 2012-3-7 01:30 | 只看该作者
学习了!

使用特权

评论回复
19
junming6385| | 2012-3-7 08:47 | 只看该作者
同意17楼!

使用特权

评论回复
20
柳江蔗农| | 2012-3-7 09:09 | 只看该作者
:lol去翻书看看

使用特权

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

本版积分规则

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

85

主题

279

帖子

2

粉丝