声明无效(2)

时间:2016-03-20 22:44:42

标签: c linux compiler-errors

我一直在编写下一个函数并得到#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;

1 个答案:

答案 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;
}

这也避免了返回指向局部变量的指针所导致的未定义行为。