2017-10-09 131 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; 
.. 
} 
相關問題