我在一个名为list.c的C文件中有一个变量,我在main.c中用函数initList(void)初始化var。如何在main.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
正如您所看到的,我在init.c(void)函数中初始化变量,我在main.c文件中调用该函数。现在我想用我的变量做点什么。例如,我想用我的函数listInsert(int data)在列表中插入一些不起作用的东西。
C是否不保留对我的变量firstItem,currentItem?
的引用答案 0 :(得分:3)
在main.c中你必须把它:
extern listItem *firstItem;
extern listItem *currentItem;
这将让编译器知道在其他.c文件中声明了两个变量firstItem
和firstItem
。
此SO Article详细说明了extern
关键字。
修改强>
但是在这里使用extern
很可能是不好的做法,因为你的整个程序中只能有一个链表。
答案 1 :(得分:0)
声明&#39; head&#39;标题中包含extern
建议重新设计currentItem
变量,&#39;当前&#39;特定于每个算法
#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;
..
}