Пропуск имен параметров в C - PullRequest
1 голос
/ 04 апреля 2019

Итак, я перебираю некоторый код для файлового ввода-вывода на C и запутался в одной строке временной функции 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; 
}

Ответы [ 2 ]

5 голосов
/ 04 апреля 2019

Эта строка:

void filecopy(FILE *, FILE *);

Является объявлением функции и используется, чтобы позволить другому коду вызывать функцию. Он указывает, что функция существует с заданным именем и заданным количеством параметров известных типов. Имена этих параметров не нужны для вызова функции. Они нужны только тогда, когда вы определяете функцию, т. Е. Когда вы указываете тело функции.

Обратите внимание, что в этом примере объявление не требуется, поскольку функция полностью определена ранее в файле.

1 голос
/ 04 апреля 2019

Как указано dbush , строка:

void filecopy(FILE *, FILE *);

является объявлением функции.Его также можно назвать прототипом функции.

В этом случае он не нужен, если ваш код организован так, как вы его показали.Если бы функция filecopy () была расположена после main () или в другом файле, вам нужно было бы где-то поместить объявление выше main ().

Если filecopy () были в другом файле, вероятно, прототип был бы во включаемом файле (.h), который будет включен в ваш файл main.c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...