实现队列的删除功能时的原型声明错误

时间:2016-01-20 02:43:19

标签: c compiler-errors queue

我正在尝试在C中实现一个队列,并在我的remove(q)方法中获得原型声明。我想知道我在这里做错了什么,我使用旧版本的队列实现作为练习,但不能把它放在一起。

#include <stdio.h>

#define MAXQUEUE 100
#define TRUE  (1==1)
#define FALSE (1==0)

struct queue {
    int items[MAXQUEUE];
    int front, rear;
};

empty(pq)
struct queue *pq;
{
    return ((pq->front == pq->rear) ? TRUE : FALSE);
}

remove(pq)
struct queue *pq;
{
    if (empty(pq)) {
        printf("queue underflow\n");
        exit(1);
    }

    if (pq->front == MAXQUEUE - 1)
        pq->front = 0;
    else
        (pq->front)++;
    return (pq->items[pq->front]);  
}

int main() {
    struct queue q;

    q.front = q.rear = MAXQUEUE - 1;

    if (empty(q)) {
        printf("hello");
    } else
        printf("\n sod off\n");

    return 0;
}

2 个答案:

答案 0 :(得分:2)

如果你宣布你的功能如下:

void
empty(struct queue *pq)
{
    ...
}

void
remove(struct queue *pq)
{
    ...
}

答案 1 :(得分:2)

您的功能不是功能。您需要调整它们以将队列作为参数并返回您的值,如下所示:

int empty(struct queue *pq)
{
    return ((pq->front == pq ->rear) ? TRUE : FALSE);
}

int remove(struct queue *pq)
{
    if(empty(pq)){
        printf("queue underflow\n");
        exit(1);
    }

    if(pq->front == MAXQUEUE-1)
        pq->front = 0;
    else
        (pq->front)++;
    return (pq->items[pq->front]);  
}

进行这些更改以及主要内容(if (empty(q) - &gt; if (empty(&q))中的一项更改会编译并输出hello