我一直在编写下一个函数并得到#34;声明没有效果"第1行警告然后"'nw'未声明"警告下一个使用 '。
symbol *newSymbol(char *symbol, int adress, unsigned int xtrnl, unsigned int action) {
symbol nw; //line 1
nw.symbol = symbol; //'nw' undeclared....
nw.adress = adress;
nw.xtrnl = xtrnl;
nw.action = action;
nw.next = NULL;
return &nw;
}
结构符号是:
typedef struct {
char *symbol;
int adress;
unsigned int xtrnl : 1;
unsigned int action : 1;
struct symbol *next;
} symbol;
答案 0 :(得分:1)
symbol
不仅是类型名称,还是newSymbol()
的参数。此外,symbol
也是symbol
(类型)的字段。类型名称的第一个字母通常大写,以避免混淆。
因此,您可以将结构的声明更改为
typedef struct symbol
{
char *symbol;
int adress;
unsigned int xtrnl : 1;
unsigned int action : 1;
struct symbol *next;
} Symbol;
然后将newSymbol()
定义如下:
symbol *newSymbol(char *aSymbol, int adress, unsigned int xtrnl, unsigned int action)
{
symbol *nw = malloc(sizeof (Symbol));
if(!nw)
return NULL;
nw -> ymbol = aSymbol;
nw -> adress = adress;
nw -> xtrnl = xtrnl;
nw -> action = action;
nw -> next = NULL;
return nw;
}
这也避免了返回指向局部变量的指针所导致的未定义行为。