首页 > 解决方案 > 在 C 中省略参数名称

问题描述

因此,我将在 C 中查看文件 I/O 的一些代码,并对临时 cat 函数的一行感到困惑。

我主要对主要线路感到困惑:

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; 
}

标签: cfile-io

解决方案


这一行:

void filecopy(FILE *, FILE *);

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

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


推荐阅读