2017-10-09 96 views
0

我在名为list.c的C文件中有一个变量,我在main.c中用函数initList(void)初始化var。如何在main.c中获取变量?如何在另一个C文件中引用一个变量?

的main.c:

#include <stdlib.h> 
#include "list.h" 

int main() { 
    initList(); 
    return 0; 
} 

list.c:

#include "list.h" 

listItem *firstItem; 
listItem *currentItem; 

void initList(void) { 
    currentItem = calloc(1, sizeof(listItem)); 
    currentItem->data = 0; 
    currentItem->lastItem = NULL; 
    currentItem->nextItem = NULL; 
    firstItem = currentItem; 
} 
void listInsert(int data) { 
    listItem *newItem = calloc(1, sizeof(listItem)); 
    newItem->data = data; 
    newItem->lastItem = currentItem; 
    newItem->nextItem = NULL; 
    currentItem = newItem; 
} 

list.h:

#ifndef LINKEDLIST_H 
#define LINKEDLIST_H 

void initList(void); 
void listInsert(int data); 

typedef struct listItem { 
    void *lastItem; 
    void *nextItem; 
    int data; 
} listItem; 

#endif 

正如你可以看到我初始化变量在我initList(无效)函数,我在main.c文件中调用。现在我想用我的变量做一些事情。例如,我想用我的函数listInsert(int data)插入一些不起作用的东西。

C不保留对我的变量firstItem,currentItem的引用吗?

回答

3

main.c中你必须把这个:

extern listItem *firstItem; 
extern listItem *currentItem; 

这将让编译器知道这两个变量firstItemfirstItem在其他一些.c文件中声明。

这个SO Article解释关于extern关键字的更多信息。

编辑
但使用extern这里是最容易坏的做法,因为你只能在你的整个程序单链表。

0

申报头列表与extern

推荐的currentItem变量的重新设计,“头部”“当前的”特异于每算法

#ifndef PRAKTIKUM_1_LINKEDLIST_H 

#define PRAKTIKUM_1_LINKEDLIST_H 

extern listItem *firstItem; // usually named 'head' 

// bad pracite, local for concrete algoritm 
// listItem *currentItem; 

void initList(void); 
void listInsert(int data); 

typedef struct listItem { 
    void *lastItem; 
    void *nextItem; 
    int data; 
} listItem; 

#endif //PRAKTIKUM_1_LINKEDLIST_H 

并且这样的建议对功能

void initList(void) { 
    listItem *currentItem; 
... 
} 
void listInsert(int data) { 
listItem *currentItem; 
.. 
} 
相关问题