C中未使用的变量

时间:2014-07-01 23:20:24

标签: c pointers linked-list

我目前正在编写C中的LinkedList实现。我遇到了以下问题:variable 'currentNode' set but not used.

我真的不明白这一点。我正在使用currentNode变量!

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

struct node {
    int val;
    struct node * next;
};

int main()
{
    struct node root;
    root.val = 0;
    root.next = NULL;

    struct node currentNode;
    currentNode = root;

    int i;
    for (i = 0; i < 10; ++i)
    {
        struct node newNode;
        newNode.val = i;
        currentNode.next = &newNode;

        currentNode = newNode;
    }

    return 0;
}

3 个答案:

答案 0 :(得分:5)

您永远不会正在阅读 currentNode变量。如果删除了提及该变量的所有行,则程序将完全相同。

(这确实是一个有用的警告:在您的情况下,可能是为了构建一个包含十个元素的列表,它指向代码中的致命错误,这意味着实际代码不执行任何操作。)

答案 1 :(得分:1)

首先,您应该提到仅当您使用-Wall或具体-Wunused-but-set-variable时才会出现此警告。

其次,gccusage的定义是从变量中读取,而不是赋值给变量。

答案 2 :(得分:0)

我发现了另一个问题。

#include <stdio.h>
#include <stdlib.h>

struct node {
    int val;
    struct node * next;
};

int main()
{
    struct node root;
    root.val = 0;
    root.next = NULL;

    struct node currentNode;
    currentNode = root;

    // .... 
    int i;
    for (i = 0; i < 10; ++i)
    {
        // newNode is a temporary value, 
        // its life time end before the next cycle 
        // u should new it 
        struct node newNode;
        newNode.val = i;
        currentNode.next = &newNode;

        currentNode = newNode;
    }

    // ...maybe like this 
    int i;
    for (i = 0; i < 10; ++i)
    {
        struct node* pNewNode = (struct node*)malloc(siof(struct node));
        pNewNode->val = i;
        currentNode.next = pNewNode;

        currentNode = *pNewNode;
    }

    // free node
    // ... 

    return 0;
}