编译时出现的警告 warning: missing braces around initializer

kiko_lee 2005-04-30 09:57:22
---------------------------------------------------------------------------
/* declaration of Morse */

Morse MorseTable[]=
{
' ',NIL,NIL,NIL,NIL,NIL,NIL,NIL,
'A',DIH,DAH,NIL,NIL,NIL,NIL,NIL,
'B',DAH,DIH,DIH,DIH,NIL,NIL,NIL,
'C',DAH,DIH,DAH,DIH,NIL,NIL,NIL,

[etc...]

'0',DAH,DAH,DAH,DAH,DAH,NIL,NIL,
'?',DIH,DIH,DAH,DAH,DIH,DIH,NIL,
'/',DAH,DIH,DIH,DAH,DIH,NIL,NIL,
0, NIL,NIL,NIL,NIL,NIL,NIL,NIL /* END MARKER */
};

/* structure called Morse */

typedef struct
{
char code;
enum
{
NIL,
DIH,
DAH,
} data[7];
} Morse;

/* example of how table is called */

Morse *CharToMorse(char c)
{
int ct=0;
while(MorseTable[ct].code)
{
if(MorseTable[ct].code==c)
return(&MorseTable[ct]);
ct++;
}
return(NULL);
}
-----------------------------------------------------------------------

Looks one-dimensional to me.....

The warnings says:
$ gcc -Wall morse.c
morse.c:52: warning: missing braces around initializer
morse.c:52: warning: (near initialization for `MorseTable[0]')

line 52 is: ' ',NIL,NIL,NIL,NIL,NIL,NIL,NIL, (see above)


如何消除这样的编译警告呢,在线等待。
...全文
1001 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
kiko_lee 2005-04-30
嘿嘿,这个和前置无关的,本来声明是放在头文件的。出现的只是warning而已,关闭Werror就没有错误了,只是想好好的规范一下代码而已。

useresu(俗人) ( ) 信誉:100 放心好了,等这个解决了,再开一个额外送100分。
回复
useresu 2005-04-30
问题解决的话,楼主给分啊,呵呵
回复
useresu 2005-04-30
先声明,才能使用啊

不然你用个前置声明.


回复
useresu 2005-04-30
typedef struct {
char name[ENTRY_NAME_SIZE];
int priority;
int options;
int stackSize;
FUNCPTR entryFunc;
char msgQName[ENTRY_NAME_SIZE];
char semaName[ENTRY_NAME_SIZE];
int arg1;
int arg2;
} TASK_ENTRY;


TASK_ENTRY gTaskTable[] = {
{"Telnetd",100,0,64*1024,(FUNCPTR)telnetd,0,0,0,0},
{"SnmpTrap",105,0,64*1024,(FUNCPTR)snmpTrapMain,0,0,0,0},
{"Alarm",110,0,64*1024,(FUNCPTR)ALARM_Callback,0,0,0,0},
{"Snmpd",111,0,64*1024,(FUNCPTR)snmpdMain,0,0,0,0}
};
回复
kiko_lee 2005-04-30
下面这个也是同样的错误,如何修改比较合适呢?

TASK_ENTRY gTaskTable[] = {
{"Telnetd",100,0,64*1024,(FUNCPTR)telnetd,0,0,0,0},
{"SnmpTrap",105,0,64*1024,(FUNCPTR)snmpTrapMain,0,0,0,0},
{"Alarm",110,0,64*1024,(FUNCPTR)ALARM_Callback,0,0,0,0},
{"Snmpd",111,0,64*1024,(FUNCPTR)snmpdMain,0,0,0,0}
};

typedef struct {
char name[ENTRY_NAME_SIZE];
int priority;
int options;
int stackSize;
FUNCPTR entryFunc;
char msgQName[ENTRY_NAME_SIZE];
char semaName[ENTRY_NAME_SIZE];
int arg1;
int arg2;
} TASK_ENTRY;
回复
elipse 2005-04-30
同上
回复
useresu 2005-04-30
enum exp
{
NIL,
DIH,
DAH,
} ;//上边此处多了个data,去掉,呵呵
typedef struct
{
char code;
exp data[7];
} Morse;

/* example of how table is called */

Morse MorseTable[]=
{
' ',NIL,NIL,NIL,NIL,NIL,NIL,NIL,
'A',DIH,DAH,NIL,NIL,NIL,NIL,NIL,
'B',DAH,DIH,DIH,DIH,NIL,NIL,NIL,
'C',DAH,DIH,DAH,DIH,NIL,NIL,NIL,

//[etc...]

'0',DAH,DAH,DAH,DAH,DAH,NIL,NIL,
'?',DIH,DIH,DAH,DAH,DIH,DIH,NIL,
'/',DAH,DIH,DIH,DAH,DIH,NIL,NIL,
0, NIL,NIL,NIL,NIL,NIL,NIL,NIL
};


Morse *CharToMorse(char c)
{
int ct=0;
while(MorseTable[ct].code)
{
if(MorseTable[ct].code==c)
return(&MorseTable[ct]);
ct++;
}
return(NULL);
}
一个枚举就是一个新的类型,跟其他任何类型都不同
回复
useresu 2005-04-30
我改过了,
这样就没问题了
回复
useresu 2005-04-30
enum exp
{
NIL,
DIH,
DAH,
} data;
typedef struct
{
char code;
exp data[7];
} Morse;

/* example of how table is called */

Morse MorseTable[]=
{
' ',NIL,NIL,NIL,NIL,NIL,NIL,NIL,
'A',DIH,DAH,NIL,NIL,NIL,NIL,NIL,
'B',DAH,DIH,DIH,DIH,NIL,NIL,NIL,
'C',DAH,DIH,DAH,DIH,NIL,NIL,NIL,

//[etc...]

'0',DAH,DAH,DAH,DAH,DAH,NIL,NIL,
'?',DIH,DIH,DAH,DAH,DIH,DIH,NIL,
'/',DAH,DIH,DIH,DAH,DIH,NIL,NIL,
0, NIL,NIL,NIL,NIL,NIL,NIL,NIL
};


Morse *CharToMorse(char c)
{
int ct=0;
while(MorseTable[ct].code)
{
if(MorseTable[ct].code==c)
return(&MorseTable[ct]);
ct++;
}
return(NULL);
}
回复
kiko_lee 2005-04-30
严格要求一些的,只是不明白为什么这样会被看作是错误。

认为既然编译器报警告了,就可以看作代码确实有问题。
回复
junguo 2005-04-30
你要怎么去除呢?你可以降低编译器的警告级别,可能就不会警告了。
不过其实这样好像也没什么问题!
回复
发动态
发帖子
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告