这是结构声明代码.
struct list_el {
int val;
struct list_el * next;
};
typedef struct list_el item;
Run Code Online (Sandbox Code Playgroud)
当我编写这样的函数时,编译器会出错.它说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;
}
Run Code Online (Sandbox Code Playgroud)
当我抬头看的参考,它说,typedef作品出来只是有点像#define.它只是在编译时进行替换.这是代码无法编译的原因吗?
Jon*_*ler 17
在这段代码中:
bool delete(item* item)
{
item *cur = NULL;
Run Code Online (Sandbox Code Playgroud)
该item在第三行被取为变量的名称item(参数到功能),而不是类型.因此,第三行看起来好像它是一个item与未定义变量相乘的表达式cur,这会导致问题; 表达的其余部分也是假的.
如果这不是您想要的,请不要对类型和变量使用相同的名称.即使你不把自己和编译器混淆,你也会混淆别人.
无论哪个参考来源说typedef并且#define"相同",现在应该从你的参考文献列表中删除!如果它无法区分两个这样根本不同的结构,那就很危险,因为你不知道它何时会误导你(但这是一个误导你的情况).
| 归档时间: |
|
| 查看次数: |
3481 次 |
| 最近记录: |