在C语言中省略参数名

在C语言中省略参数名,c,file-io,C,File Io,因此,我正在检查一些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){

因此,我正在检查一些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; 
}
这一行:

void filecopy(FILE *, FILE *);
是函数声明,用于允许其他代码调用函数。它指定存在具有给定名称和给定数量的已知类型参数的函数。调用函数不需要这些参数的名称。只有在定义函数时,即在指定函数体时,才需要它们

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

此行:

void filecopy(FILE *, FILE *);
是函数声明,用于允许其他代码调用函数。它指定存在具有给定名称和给定数量的已知类型参数的函数。调用函数不需要这些参数的名称。只有在定义函数时,即在指定函数体时,才需要它们

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

如所述,行:

void filecopy(FILE *, FILE *);
是一个函数声明。它也可以称为函数原型

在这种情况下,如果您的代码按照所示的方式排列,则不需要它。如果filecopy函数位于main之后或另一个文件中,则需要在main之上的某个位置进行声明

如果filecopy位于另一个文件中,原型可能位于包含在主.c文件中的include文件.h中。

如所述,行:

void filecopy(FILE *, FILE *);
是一个函数声明。它也可以称为函数原型

在这种情况下,如果您的代码按照所示的方式排列,则不需要它。如果filecopy函数位于main之后或另一个文件中,则需要在main之上的某个位置进行声明


如果filecopy位于另一个文件中,原型可能位于包含在主.c文件中的include文件.h中。

为了使其完全明确:函数声明不调用函数,它只声明函数名称在声明范围内的解释方式-在本例中,作为接受FILE*类型的两个参数且不返回任何内容的函数名。为了使其完全明确:函数声明不调用函数,它只声明函数名在声明范围内的解释方式-在本例中,作为接受FILE*类型的两个参数且不返回任何内容的函数的名称。关于:fopen*++argv,r在C中要非常小心运算符的优先级。例如,此表达式:**++argv非常“不确定”,它调用函数在主程序中运行关于:fopen*++argv,r在C语言中,要非常小心运算符的优先级。例如,这个表达式:*++argv非常“不确定”,它调用的函数在主程序中运行