【发布时间】:2017-09-18 08:15:23
【问题描述】:
我正在用 C 语言构建一个哈希表。
除了这个变量 cur_item 之外,一切似乎都运行良好,它在编译时报告我一个错误。
代码如下:
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呢?可能你没有向我们展示我们需要的一切...... -
另外,变量应该在任何执行语句之前初始化。即使您使用的是最新的 C 标准,也应该考虑到这一点,否则代码会变得丑陋和嘈杂。 #justSayin
-
我愿意为您提供更多信息,但找不到相关的信息来帮助您。我已经在我的源代码中声明了其他
item变量,而这个变量是唯一破坏的变量 -
尝试使用选项 -std=gnu99 进行编译
-
@tilz0R 一些编码风格想要这样,而另一些则不需要。我认为在第一次使用时引入变量是一种很好的风格。不要将中世纪的要求强加给新手。
标签: c