首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C问题:错误:预期')‘之前的'*’令牌

C问题:错误:预期')‘之前的'*’令牌
EN

Stack Overflow用户
提问于 2010-05-24 05:40:02
回答 4查看 8.1K关注 0票数 3

编辑2

谢谢你的建议,我从建议中编辑了下面的代码。然而,它似乎仍然没有编译。尽管如此,还是非常感谢你的帮助。

编辑

我为没有将pcb结构放入代码片段而道歉。有一个结构,称为pcb定义在上面的两个结构,我最初张贴。即,

代码语言:javascript
运行
复制
typedef struct pcb{
    UINT32 proc;
    struct pcb *link;
}pcb;

嗨,

几分钟前,我问了一个关于C结构的问题,得到了一个快速的回答。但是现在我面临着另一个问题,就是这个问题标题上的错误。我试图使用队列数组在C中实现一个简单的优先级队列。但是,当我试图在pcb_pQ结构上声明一个函数时,我会得到上述错误。我在听过的文件中清楚地定义了结构。

在头文件中:

代码语言:javascript
运行
复制
typedef struct pcb_Q{
    pcb *head;
    pcb *tail;
    SINT32 size;
} pcb_Q;

typedef struct pcb_pQ {
 pcb_Q queues[5];
 SINT32 size;
} pcb_pQ;

头文件中的函数原型:

代码语言:javascript
运行
复制
/*priority queue operations*/
VOID pcb_pq_enqueue(pcb_pQ*, pcb*);

.c文件中的函数增强:

代码语言:javascript
运行
复制
VOID pcb_pq_enqueue(pcb_pQ* pcb_pQ_p, pcb* pcb_p) {
 pcb_Q* pcb_Q_p;
 int priority;

 priority = pcb->proc_priority;
 pcb_Q_p = &pcb_pQ->queues[priority];

 pcb_enqueue(pcb_Q_p, pcb);
}

当我试图编译上面的代码时,我会在'*‘令牌之前得到一个“错误:预期的’)”。此错误指向.c文件中的函数签名,即

代码语言:javascript
运行
复制
VOID pcb_pq_enqueue(pcb_pQ* pcb_pQ_p, pcb* pcb_p) {

但是我不知道为什么我会犯这个错误,有人能帮我一下吗?非常感谢。

EN

回答 4

Stack Overflow用户

发布于 2010-05-24 05:44:16

您包括头文件吗?除非拼写错误,否则该错误几乎总是由缺少的类型胡枝子引起的。

换句话说,编译器既不知道pcb_pQ类型,也不知道pcb类型(或者两者都知道)。

编辑:还有其他问题,因为它编译得很好:

代码语言:javascript
运行
复制
qq.h
    typedef struct pcb {
        unsigned int proc;
        struct pcb *link;
    } pcb;

    typedef struct{
        pcb *head;
        pcb *tail;
        int size;
    } pcb_Q;

    typedef struct pcb_pQ {
        pcb_Q queues[5];
        int size;
    } pcb_pQ;

    void pcb_pq_enqueue(pcb_pQ*, pcb*);

qq.c:
    #include <stdio.h>
    #include "qq.h"
    void pcb_pq_enqueue(pcb_pQ *pcb_pQ, pcb *pcb) {}
    int main (void) { return 0; }

我不得不使用其他类型(我将pcb结构修改为命名结构--我不确定您给定的结构是否应该按原样编译,因为不存在struct pcb类型)。

基于到目前为止的所有评论和回答,我非常肯定您的编译器有问题。GCC把上面的片段编译得很好。

试着把我上面的两个文件放到你的系统上,看看它们是否可以编译。

请注意,您确实需要命名您的pcb结构。关于血淋淋的细节,请看here,但大家的共识似乎是

代码语言:javascript
运行
复制
    typedef struct {
        unsigned int proc;
        struct pcb *link;
    } pcb;

将定义一个struct pcb不完全类型,它是一个与pcb不同的类型(以及当前正在定义的结构)。

票数 2
EN

Stack Overflow用户

发布于 2010-05-24 05:44:35

看起来编译器没有找到pcb的定义。

票数 0
EN

Stack Overflow用户

发布于 2010-05-24 06:02:21

首先,它是“VOID”而不是“VOID”,除非您有类似的定义

代码语言:javascript
运行
复制
#define VOID void

如果

代码语言:javascript
运行
复制
typedef struct tag_struct_pcb_Q {
    pcb *head;
    pcb *tail;
    SINT32 size;
} pcb_Q;

typedef struct tag_structpcb_pQ {
 pcb_Q queues[5];
 SINT32 size;
} pcb_pQ;

现代的'C‘编译器期望返回类型必须提到。

如果您有这样的定义,也会导致错误。

代码语言:javascript
运行
复制
#define VOID

另一种可能性

VOID pcb_pq_enqueue(pcb_pQ* pcb_pQ,pcb* pcb) {

pcb从哪里来?使用pcb* pcb是不好的。总是为变量类型和变量名称指定不同的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2894967

复制
相关文章

相似问题

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