我正在尝试创建两个.c源文件中使用的结构,以创建一个简单的链表结构。我认为这样可以节省在头文件中创建结构的时间,但是,我在*之前得到'解析错误'。
这是我正在使用的代码:
/*
* Structures.h
*
* Created on: Dec 17, 2011
* Author: timgreene
*/
#ifndef STRUCTURES_H_
#define STRUCTURES_H_
typedef struct list_struct {
int data;
struct list_struct* next;
struct list_struct* prev;
} list;
#endif /* STRUCTURES_H_ */
编辑:我最初省略了一个细节,我实际上正在使用XMOS工具链中的xcc进行编译。我仍然不明白.h
文件语法会有所不同。
它可能是我正在使用的编译标志吗?
这是控制台打印输出:
xcc -O0 -g -Wall -c -MMD -MP -MF"filter.d" -MT"filter.d filter.o " -target=XC-1A -o filter.o "../filter.xc"
In file included from ../filter.xc:15:
Structures.h:13: error: parse error before '*' token
Structures.h:14: error: parse error before '*' token
Structures.h:15: error: parse error before '}' token
答案 0 :(得分:10)
在一些XMOS文档中,看来问题是 XC不是C ,它只是一种类似C的语言。来自“XC编程指南”:
XC提供了许多与C相同的功能,主要的遗漏是支持 指针。
...这解释了为什么它不接受您结构中的next
和prev
指针。
显然,xcc可以让你混合C和XC源,所以如果你要将结构的使用限制为C代码,它应该可以工作。从“XCC命令行手册”中可以看出,任何具有.xc
扩展名的内容(如上面使用的命令行中)默认情况下都被视为XC而不是C源代码。可以通过在命令行上的C源之前放置选项-xc
并在之后放置-x
(或者仅使用.c
扩展名重命名文件)来覆盖此选项。
如果你必须使用XC而不是C,你可能需要找到另一种做事方式(数组,也许?)。
答案 1 :(得分:1)
尝试使用struct list_struct
的正向声明:
struct list_struct;
typedef struct list_struct {
int data;
struct list_struct* next;
struct list_struct* prev;
} list;
也许你的编译器在它自己的定义中没有识别标识符,我不确定标准对此有何看法(如果有的话)。
对于那些还不知道的人,这也是处理struct
定义中循环依赖的方法:
struct a;
struct b;
struct a {
int x;
struct b *y;
};
struct b {
int x;
struct a *y;
};