gpt4 book ai didi

c - "FILE *fp, *fopen();"是做什么的?

转载 作者:太空狗 更新时间:2023-10-29 15:21:17 25 4
gpt4 key购买 nike

The UNIX Programming environment 的第 182 页上efopen的代码如下:

FILE *efopen(file, mode)    /* fopen file, die if can't */
char *file, *mode;
{
FILE *fp, *fopen();
extern char *progname;

if ((fp = fopen(file, mode)) != NULL)
return fp;
fprintf(stderr, "%s: can't open file %s mode %s\n",
progname, file, mode);
exit(1);
}

FILE *fp, *fopen(); 这行是做什么的?

我的理解是,它声明了一个变量 fp,它是一个指向 FILE 的指针,还有一个函数 fopen,它返回一个指向文件

如果是这样:为什么在函数体内声明fopen forward?为什么我们不声明它的参数?

最佳答案

它创建一个名为fp 的局部变量(FILE * 类型),并转发声明an external function named fopen (with a signature of FILE *fopen()) .

C 中 fopen 函数声明中缺少参数并不意味着该函数采用零参数(该函数签名将是 FILE *fopen(void)) .相反,缺少参数意味着函数具有未指定的参数(未指定数量和未指定类型)。

这是一种非常古老的 C 形式,在现代 C 中更惯用的写法是:

#include <stdio.h>   // fopen() and fprintf()
#include <stdlib.h> // exit()
#include <string.h> // strerror()
#include <errno.h> // errno

extern char *progname;

FILE *efopen(const char *file, const char *mode) {
FILE *fp = fopen(file, mode);
if (fp) return fp;

fprintf(stderr, "%s: can't open file %s in mode %s: %s\n",
progname, file, mode, strerror(errno));
exit(1);
}

关于c - "FILE *fp, *fopen();"是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51812707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com