首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C头文件(.h)中定义自引用结构?

在C头文件(.h)中定义自引用结构?
EN

Stack Overflow用户
提问于 2011-12-18 08:51:29
回答 2查看 626关注 0票数 8

我正在尝试创建一个在两个.c源文件中使用的结构,以创建一个简单的链表结构。我以为在头文件中创建一个结构会节省时间,但是,我得到了一个“parse error before *”错误。

这是我使用的代码:

代码语言:javascript
复制
/*
 * 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文件语法会有什么不同。

它可能是我正在使用的编译标志吗?

下面是控制台的打印输出:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-18 10:55:21

环顾一些XMOS文档,问题似乎在于XC不是C,它只是一种类似C的语言。来自"XC编程指南“:

XC提供了许多与C相同的功能,但主要省略了对指针的支持。

...which解释了为什么它不接受结构中的nextprev指针。

显然,xcc允许您混合使用C和XC源代码,因此,如果您将该结构的使用限制为C代码,那么它应该可以工作。从"XCC命令行手册“中可以看出,默认情况下,任何带有.xc扩展名的代码(如您在上面使用的命令行中的扩展)都被视为XC源代码,而不是C源代码。这可以通过在命令行中将选项-xc放在C源代码之前并在之后使用-x来覆盖(或者只使用.c扩展名来重命名文件)。

如果您必须使用XC而不是C,那么您可能需要找到另一种方法(也许是数组?)。

票数 10
EN

Stack Overflow用户

发布于 2011-12-18 10:29:37

尝试使用struct list_struct的转发声明

代码语言:javascript
复制
struct list_struct;
typedef struct list_struct {
    int data;
    struct list_struct* next;
    struct list_struct* prev;
} list;

也许你的编译器不能识别自己定义中间的标识符,我不确定标准对此有什么规定(如果有的话)。

对于那些还不知道的人来说,这也是在struct定义中处理循环依赖的方法:

代码语言:javascript
复制
struct a;
struct b;

struct a {
    int x;
    struct b *y;
};

struct b {
    int x;
    struct a *y;
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8549077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档