我构建了一个堆栈数据结构,它有一个peek
方法。编译器给我一个 warning: initialization makes pointer from integer without a cast
warning when calling peek
in main.这是我所拥有的:
堆栈.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
进行编译,这会引发警告。运行它也会出现段错误(事先没有)。
最佳答案
看起来 peek() 没有在 .h 中声明,所以编译器假设它是一个 int。 main() 称它为一个指针返回类型。
警告 100% 正确!
关于c - 链接头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11707957/