C语言链表开发中自定义结构体指针typedef编译报错问题
报错成因
你定义的头文件保护宏和typedef的类型别名重名了:
- 头文件开头的
#define linkedList会触发预处理器的替换逻辑,在编译预处理阶段,把整个头文件里所有linkedList字符串都替换为空值 - 当处理到
typedef listStringNode *linkedList;这行时,代码会被预处理为typedef listStringNode * ;,缺少了要定义的类型别名标识符,因此触发编译错误。
修复方案
修改头文件保护宏为不会和代码中其他标识符冲突的名称即可,业内通常使用全大写+下划线+_H后缀的格式命名头文件保护宏,避免和小写/驼峰命名的变量、类型别名重名。
修改后的linkedList.h参考代码:
#ifndef LINKED_LIST_H #define LINKED_LIST_H typedef struct listStrNode { char *string; struct listStrNode *next; } listStringNode; typedef listStringNode *linkedList; #endif
修改后使用原编译指令gcc main.c即可正常编译通过。
内容的提问来源于stack exchange,提问作者Gabe Koleszar
相关产品推荐
相关产品推荐

