这是结构声明代码。
struct list_el {
int val;
struct list_el * next;
};
typedef struct list_el item;
当我编写这样的函数时,编译器会报错。它说 cur undeclared before first use
。
bool delete(item* item)
{
assert(item != NULL);
item* cur = NULL;
cur = head;
item* prev = NULL;
while (cur) {
if (cur == item) {
if (prev == NULL) {
head = item->next;
} else {
prev->next = item->next;
}
free(item);
return true;
}
prev = cur;
cur = cur->next;
}
return false;
}
在我查找引用资料后,它说 typedef
的工作只是有点像 #define
。它只是在编译时进行替换。这就是代码无法编译的原因吗?
最佳答案
在这段代码中:
bool delete(item* item)
{
item *cur = NULL;
第三行中的 item
是变量 item
的名称(函数的参数),而不是类型。因此,第三行看起来好像开始时是一个将 item
乘以 undefined variable cur
的表达式,这会导致问题;表达式的其余部分也是伪造的。
如果这不是您想要的,请不要对类型和变量使用相同的名称。即使您不混淆自己和编译器,您也会混淆其他人。
无论哪个引用来源说 typedef
和 #define
是“相同的”,都应该现在从您的引用列表中删除!如果它不能区分两种根本不同的构造,那将是危险的,因为您不知道它何时会误导您(但这是误导您的一种情况)。
关于我可以命名一个与 typedef 结构名称同名的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13374497/