在C中省略参数名称

时间:2019-04-04 18:32:10

标签: c file-io

因此,我要遍历C语言中文件I / O的一些代码,并在临时Cat函数的一行上感到困惑。

我主要在main的行上感到困惑

void filecopy(FILE *, FILE *);

我们没有为ifp和ofp指定要传递的文件名,所以我不确定这行在做什么。

/* filecopy: copy file ifp to ofp */
void filecopy(FILE *ifp, FILE *ofp) {

    int c; 

    while((c = getc(ifp)) != EOF){
        putc(c, ofp); 
    }
}


/* cat: concatenate files, version 1*/
int main(int argc, char **argv) {

    FILE *fp;
    void filecopy(FILE *, FILE *);

    if(argc == 1){ /*no args: copy standard input */
        filecopy(stdin, stdout);
    }else{
        while(--argc > 0){
            if((fp = fopen(*++argv, "r")) == NULL){
                printf("cat: can't open %s\n", *argv);
                return 1; 
            } else{
                filecopy(fp, stdout);
                fclose(fp); 
            }
        }
    }

    return 0; 
}

2 个答案:

答案 0 :(得分:5)

此行:

void filecopy(FILE *, FILE *);

函数声明,用于允许其他代码调用函数。它指定存在具有给定名称和给定数量的已知类型参数的函数。不需要这些参数的名称即可调用该函数。仅当您定义功能时,即指定功能主体时,才需要使用它们。

请注意,在此示例中,不需要声明,因为该函数在文件的前面已完全定义。

答案 1 :(得分:1)

dbush所述,该行:

void filecopy(FILE *, FILE *);

是一个函数声明。它也可以称为函数原型。

如果您的代码按照显示的顺序排列,则在这种情况下不需要。如果 filecopy()函数位于 main()之后或另一个文件中,则需要在main()上方的声明中放置某个地方。

如果 filecopy()位于另一个文件中,则原型可能位于要包含在main.c文件中的包含文件(.h)中。