功能错误

时间:2015-09-01 11:43:06

标签: c function implicit-declaration

这是我的第一个C程序,我不知道为什么会出现以下错误。

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    struct ListNode* next;
   int content;
} ListNode;

int main() {
    //puts("Hello UPC World"); /* prints Hello UPC World */

    //ListNode* h = malloc(sizeof(ListNode));
    gridinit(3, 5);
    //int c = h->content;
    //printf("%d",c);

    return EXIT_SUCCESS;
}

ListNode* gridinit(int numcolumns, int numrows) {
    ListNode* head = malloc(sizeof(ListNode));
    head->content = 2;
    head->next = NULL;
    return head;
}

为什么我会收到错误

  

在func gridinit()中输入冲突

5 个答案:

答案 0 :(得分:2)

在结构顶部定义函数声明

ListNode* gridinit(int numcolumns, int numrows);

typedef struct {
    struct ListNode* next;
   int content;
} ListNode;

 int main() {
//puts("Hello UPC World"); /* prints Hello UPC World */

//ListNode* h = malloc(sizeof(ListNode));
gridinit(3, 5);
//int c = h->content;
//printf("%d",c);

return EXIT_SUCCESS;
}

ListNode* gridinit(int numcolumns, int numrows) {
ListNode* head = malloc(sizeof(ListNode));
head->content = 2;
head->next = NULL;
return head;
}

答案 1 :(得分:2)

这是因为你的函数是在调用后定义的。您可以在return html.replace(new RegExp(query, "gi"), "<span class='search-enlight'>$&</span>"); 之后和struct之前声明该函数的原型

main

你将有利于编译。

答案 2 :(得分:2)

ListNode* gridinit(int numcolumns, int numrows); forward declaration添加everything works fine

gridinit()

答案 3 :(得分:2)

TL; DR 回答 - 对于在定义之前使用的所有函数(称为),您需要为这些函数添加forward declaration在调用者函数之前。在这种情况下,由于gridinit()的定义是在main()main()使用gridinit()之后编写的,因此您必须在gridinit()之前添加main()的前向声明你将会很高兴。

为了详细说明这种情况,在main()函数中,您正在调用gridinit(),但在此之前,编译器不知道gridinit()函数的原型。

由于向后兼容性,函数的一个名为隐式声明的功能假定在定义或声明之前使用过的函数接受任何数量的函数参数并返回int

稍后,当您实际定义该函数时,您将返回类型设为ListNode*,这会在此处产生冲突。

FWIW,根据C99标准(从前),隐式函数声明的( evil )功能已被正式删除,但编译器仍然继续为遗留代码支持相同的功能。如果启用编译器警告并使用严格一致性进行编译,则编译器应该警告(甚至停止),以防缺少前向声明。

答案 4 :(得分:0)

gridinit中调用main之前应该有gridinit的声明或定义(编译器需要知道它存在)。

此外,你不应该忽略h的返回值,它返回一个你已分配内存的指针(忽略它会导致内存泄漏),而应该将它分配给main没有在gridinit中分配内存(因为你已经在#include <stdio.h> #include <stdlib.h> typedef struct { struct ListNode* next; int content; } ListNode; ListNode* gridinit(int numcolumns, int numrows) { int main() { //puts("Hello UPC World"); /* prints Hello UPC World */ ListNode* h = gridinit(3, 5); int c = h->content; printf("%d",c); return EXIT_SUCCESS; } ListNode* gridinit(int numcolumns, int numrows) { ListNode* head = malloc(sizeof(ListNode)); head->content = 2; head->next = NULL; return head; } 中这样做了)。

sudo a2disconf munin