C 在单独的文件中调用函数

C 在单独的文件中调用函数,c,C,我试图调用另一个c文件中的函数,但是,该函数属于在链表中创建的数据类型,类型定义称为“treat”。我的代码如下: typedef struct micro{ int id; char user[51]; char text[141]; struct micro *next; }treat; treat * createMicro(treat * treatList); int ma

我试图调用另一个c文件中的函数,但是,该函数属于在链表中创建的数据类型,类型定义称为“treat”。我的代码如下:

typedef struct micro{
    int id;                 
    char user[51];          
    char text[141];         

    struct micro *next;  
}treat;

treat * createMicro(treat * treatList);

int main(int argc, char *argv[]) {

  int menu_op;

  if(argc <= 1) {
    printf("Please enter a number argument between 1 and 8.");
    exit(0);
  }
  else if(argc > 2) {
    printf("Too many arguments.");
    exit(0);
  }

  menu_op = atoi(argv[1]);

  if(menu_op == 1) {
    createMicro(treat *treatList); //Where the error is coming from
  }

}

将文件扩展名从“.c”重命名为“.h”,并将其包括在内:

#include "createMicro.h"

显然,您已经在调用该函数,错误显然与参数列表中的语法错误有关。您编写了一个声明而不是给出一个参数,很可能您只是复制了函数的原型

更改此项:

createMicro(治疗*治疗列表);
…如果您的函数允许
NULL

createMicro(空);
…或者,如果您想提供预填充的
处理

treat myTreatList={
23,/*id*/
“me用户”、/*用户*/
“一些文本”、/*文本*/
NULL/*下一个*/
};
createMicro(&myTreatList);

顺便说一句,您需要将调用结果存储在某处…

我需要修复的错误是参数。而不是:

createMicro(treat *treatList);
应该是:

createMicro(treatList);

在调用“creatMicro”之前将变量“treatList”声明并初始化为零

那么,为什么要调用
printf
printf(“参数太多”)而不是
printf((const char*)“参数太多”)?类似地,退出(0)
:为什么不退出(int 0)
?为什么不
atoi(char*argv[1])
if(menu_op==1){treat treatList={0};createMicro(&treatList);}
。。。但是,当然,变量定义应该有足够的范围满足您的需求(如果
的范围太窄,就在
中)。看看您是如何调用
printf
exit
atoi
,然后看看您是如何调用
createMicro
。注意到一个不同吗?您没有包含标题。您应该使用结构和函数定义编写一个头文件
createMicro.h
,并使用
main();退出(退出失败)请删除该建议。包含文件应仅包含声明,而不包含定义(代码)。不注意这是一种反模式和违反一个定义规则的方法。@SergeBallesta C没有模板。@SerceBallesta声明也是代码。我知道这一点。但我试着使用共同语言。不管怎样,把一个定义放在一个文件中,包括一个反模式。@ SergBaleLista虽然C和C++可能是密切相关的,但它们应该是完全不同的,即使它们有一些“公共”部分。因为 >处理列表< /C>是指向链表的指针,声明它如下:<代码> Teal*TealStale= null;代码>则不在实际调用语句的调用参数中包含变量类型
createMicro(treatList);