我正在C中構建哈希表。 除編譯時報告錯誤的變量cur_item
外,似乎一切正常。C - 聲明中的未聲明變量
下面是代碼:
void insert(hash_table* ht, const char* key, const char* value) {
const int load = ht->count * 100/ht->size;
if (load > 70) {
resize_up(ht);
}
item* item = new_item(key, value);
int index = get_hash(item->key, ht->size, 0);
item* cur_item = ht->items[index];
int i = 1;
while (cur_item != NULL) {
/** PROCESS **/
}
}
這裏是我的Makefile中(不是最好的我猜的):
main: main.o hash_table.o prime.o
gcc -g -Wall -lm -o main.out ./build/main.o ./build/hash_table.o ./\
build/prime.o
main.o: ./src/main.c ./src/hash_table.h
gcc -c ./src/main.c -o ./build/main.o
hash_table.o: ./src/hash_table.c ./src/hash_table.h
gcc -c ./src/hash_table.c -o ./build/hash_table.o
prime.o: ./src/prime.c ./src/prime.h
gcc -c ./src/prime.c -o ./build/prime.o
這裏是錯誤:
./src/hash_table.c: In function ‘insert’:
./src/hash_table.c:65:9: error: ‘cur_item’ undeclared (first use in this function); did you mean ‘del_item’?
item* cur_item = ht->items[index];
^~~~~~~~
del_item
./src/hash_table.c:65:9: note: each undeclared identifier is reported only once for each function it appears in
make: *** [Makefile:10: hash_table.o] Error 1
的類型item
代表我創建的結構。 del_item
是一個函數,沒有理由在那裏使用它。
如果我在if
循環之前聲明cur_item
,然後在get_hash()
函數之後初始化它的值,則編譯工作正常。
有人可以解釋爲什麼第一次編譯失敗?在我的Makefile中是否有缺失?
'item * item'沒有使編譯器不高興,爲什麼'item * cur_item'?也許你不會向我們展示我們需要的一切...... – gsamaras
另外,變量應該在任何執行語句之前在頂部初始化。即使你使用的是最新的C標準,也應該考慮這種情況,否則代碼會變得醜陋和嘈雜。 #justSayin – tilz0R
我願意給你更多的信息,但我找不到相關的幫助你。我在源代碼中聲明瞭其他'item'變量,這是唯一一個打破 – Cerclique