如何从头文件中读取输入?

时间:2014-10-21 09:34:15

标签: c++ c input header-files

我有一个头文件abc.h

//abc.h
unsigned int *get(void)
{
   static unsigned int input[] =
   {
      1,
      2, 2,
      4, 5,
      6, 7
   };
return input;
}

现在,我想读取这个输入(从头文件,而不是从某些文本文件)到我的主cpp文件说xyz.cpp

我正在考虑使用数组来访问这些元素,但我认为它不会起作用。

int arr[6];
arr=get();

第一个元素是测试用例数n,第二个和第三个元素是二维数组的维度,其余元素是二维数组的值。所以我需要输入n,行的值,2D数组的列和值arr [rows] [columns]

关于如何实现这一目标的任何想法?

编辑:我真的无法弄清楚为什么这个问题会被低估。 我同意这不是一个好的实现,但我得到了一个输入头文件,我只能通过这个头文件读取数据!!

1 个答案:

答案 0 :(得分:3)

如果您能够使用此文件编译程序,则无需读取任何内容。这个数组及其值将被编译到您的程序中,您可以在适当的位置访问它们

您的xyz.cpp文件应如下所示:

#include "abc.h" // given abc file located in the same directory

int main(){
   unsigned int * myArrayPtr = get();
   // here comes some processing and, if you want, reading values from this array;
   unsigned int numberOfCases = myArrayPtr[0];

   unsigned int * dimensionsArrayPtr = myArrayPtr + 1;
   unsigned int xArraySize = dimensionsArrayPtr[0];
   unsigned int yArraySize = dimensionsArrayPtr[1];

   // and etc.
   // Most interesting part to represent those values as two dimensional array
   // I left to you :)       
   return 0;
}

另外,你应该记住这个技巧只能因为头文件中的数组声明为静态而起作用。另外,你的程序会有不确定的行为。

还有一个。如果在头文件中定义了函数体,则应将其声明为 inline 。 只要这个头只包含在一个cpp文件上 - 它就可以了。但当它包含更多的一个代码文件时,您将得到已定义的链接器错误。

我建议你详细了解cpp中的指针。这篇文章足够好http://www.cplusplus.com/doc/tutorial/pointers/

关于静态关键字 - 要完全理解这个例子 - SO本身就有很好的答案 The static keyword and its various uses in C++