C ++ - 在一个函数/文件中初始化变量然后在main()/另一个文件中使用它的最佳方法是什么?

时间:2015-04-27 22:23:43

标签: c++ variables declaration

在C ++中,假设我需要为变量赋值,我想在main()之外进行,所以代码更清晰,但后来我想在main()或其他内部使用该变量进行操作功能。例如,我有:

int main()
{
int a = 10;
int b = 20;
SomeFunction(a,b);
}

我希望得到类似的东西:

void Init()
{
int a = 10;
int b = 20;
}

int main()
{
SomeFunction(a,b);
}

但显然编译器会在main()的范围内声明a和b未声明。我总是可以将它们声明为全局变量,但是可能有更好的方法来解决这个问题,并且我认为全局变量从长远来看并不是那么好。我不想使用课程。那么你们提出什么建议呢?

3 个答案:

答案 0 :(得分:4)

使用结构:

struct data
{
    int x;
    int y;
};

data Init()
{
    data ret;
    ret.x = 2;
    ret.y = 5;
    return ret;
}

int main()
{
    data v = Init();
    SomeFunction(v.x, v.y); //or change the function and pass there the structure
    return 0;
}

如果您不想使用偶数结构,那么您可以通过引用将值传递给Init函数。但在我看来,第一个版本更好。

void Init(int &a, int &b)
{
    a = 5;
    b = 6;
}

int main()
{
    int a, b;
    Init(a, b);
    return 0;
}

答案 1 :(得分:4)

您可以使用extern关键字。它允许变量定义一次,然后在任何地方使用。您可以像这样使用它:

// main.cpp

extern int a;
extern int b;

并在您的其他文件中

// Other.cpp

int a = 10;
int b = 20;

您可以根据需要多次使用extern声明这些内容,但只能定义一次。

您可以详细了解extern here

答案 2 :(得分:0)

根据具体情况,您可能希望将这些变量的值存储在文件中,并在需要时从磁盘中读取它们。例如,您可以使用data_values.txt,其中有空格分隔的整数:324 26 435 ....

然后在另一个源文件中定义文件读取函数,比如data_reader.cpp:

#include<fstream>
#include<string>
#include<vector>

std::vector<int> get_data(const std::string& file_name){
  // Initialize a file stream
  std::ifstream data_stream(file_name);

  // Initialize return
  std::vector<int> values;

  // Read space separated integers into temp and add them to the back of
  // the vector.
  for (int temp; data_stream >> temp; values.push_back(temp)) 
  {} // No loop body is necessary.

  return values;
}

在您要使用该功能的任何文件中,输入

#include <string>
#include <vector>
// Function declaration
std::vector<int> get_data(const std::string& file_name);
// File where the data is stored
const std::string my_data_file {"data_values.txt"};

void my_function() {
... // do stuff here
std::vector<int> data_values = get_data(my_data_file);
... // process data
}

如果您也避免使用C ++标准库中的类,那么您可能希望使用int数组作为返回值,使用char *或char数组作为文件名和scanf或其他一些C函数进行读取文件。