创建全局FILE*对象?

tsi*_*iki 1 c c++

我正在构建一个程序,它有几个需要从文件中读取数据的函数.由于函数的使用频率相当高,因此打开和关闭每个调用的文件会非常耗时,所以我的计划是将FILE*对象设置为全局,并让文件打开程序的整个持续时间.显然,这是不可能的,因为这:

#include <fstream>
FILE * yhtit;
yhtit = fopen("thefile.txt","r");
int main() {
return 0; }
Run Code Online (Sandbox Code Playgroud)

给出错误: main.cpp|54|error: expected constructor, destructor, or type conversion before ‘=’ token|

保持文件在程序的整个持续时间内打开的最佳方法是什么,而不必单独将FILE*对象传递给需要它的每个函数?

Spi*_*dey 8

你几乎做对了.试试这个:

#include <fstream>

FILE * yhtit;

int main() {
    yhtit = fopen("thefile.txt","r");

    //Do your thing here.

    fclose(yhtit);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 公平地说,全局变量解决方案是问题所要求的. (8认同)

Joh*_*ica 5

最好将FILE指针传递给函数而不是创建全局变量。全局变量通常是代码异味,这是可疑代码的标志。您可以将文件传递给函数,而不必多次打开和关闭文件。例如:

#include <stdio.h>

void readData(FILE *);
void readMoreData(FILE *);

int main() {
    FILE *fp = fopen("...", "r");

    readData(fp);
    readMoreData(fp);

    fclose(fp);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)