链接头文件

时间:2012-07-29 08:58:30

标签: c pointers header-files compiler-warnings

我构建了一个堆栈数据结构,它有一个peek方法。在main中调用warning: initialization makes pointer from integer without a cast时,编译器会给我peek警告。这就是我所拥有的:

stack.h

struct stack_elem {
    struct stack_elem *next;
};

struct stack {
    struct stack_elem *top;
};

void stack_init(struct stack *stack);
int isEmpty(struct stack *);
struct stack_elem * peak(struct stack *);

及其实施:

void stack_init(struct stack *stack) {
    stack->top = NULL;
}

int isEmpty(struct stack *stack) {  
    if (stack->top == NULL) 
        return 1;
    else
        return 0;
}

struct stack_elem * peek(struct stack *stack) { 
    if (isEmpty(stack) == 1)  
        return NULL;
    else
        return stack->top;
}

在我的main.c中,我按如下方式定义堆栈:

struct stack stack;
stack_init(&stack);

并致电peek:

struct stack_elem * elem = peek(&stack);

此行抛出警告。这里奇怪的是我曾经将stack.c导入main.c并使用$ gcc main.c进行编译。这绝对没有错误。现在我将导入更改为stack.h,并且我正在编译$ gcc main.c stack.c,它会抛出警告。运行它也是段错误(事先没有)。

3 个答案:

答案 0 :(得分:3)

看起来peek()没有在.h中声明,所以编译器假设它是一个int。 main()调用它假设它是一个指针返回类型。

警告100%正确!

答案 1 :(得分:3)

在我的头文件中有一个拼写错误?

struct stack_elem * peak(struct stack *);

"巅峰",您的实施内容为" peek"。但是,不知道这是否会引起这样的警告。

答案 2 :(得分:2)

变化:

struct stack_elem * peak(struct stack *);

要:

struct stack_elem * peek(struct stack *);

:)