c - 链接头文件

标签 c pointers header-files compiler-warnings

我构建了一个堆栈数据结构,它有一个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/

相关文章:

C++ 多个库定义相同的类名

基于外部库的PHP扩展

c - 在c中execlp重定向stdin

c - printf 反转字符串时输出错误

C 指针到指针。为什么需要有两个星号?

从 Swift 调用 2D C 数组

c++ - 如何从头文件中读取输入?

c - 奇怪的段错误发生

c - 解析链表时出现段错误

c - 标准库与C中用户定义的头文件(.h)及其实现文件(.c)有何不同?