我想知道在C语言中是否有可能在头文件中分配内存,以方便我。例如,在我的源代码中,我像这样分配缓冲区:
float *data = malloc((10*10) * sizeof(float));
我的代码将与其他人的代码进行比较,因此我只想在他的代码中插入我的函数
data
,并添加我的头(它已经包括所有缓冲区分配)。这有效吗?谢谢您,
最佳答案
你可以在任何你喜欢的地方加一个标题,所以这是完全合法的,如果不是非常好的风格
int myFunction()
{
#include "myfile.h"
}
然而,这对我来说是可怕的,应该被投下一票而被遗忘。
你的问题是你的线路
float *data = malloc((10*10) * sizeof(float));
在函数体之外是非法的。你有两个办法。可以将其包装在函数中:
float* getFloatArray(int count)
{
return malloc(count * sizeof(float));
}
如果您只需要一个实例,即使您多次调用它:
float* getFloatArray(int count)
{
static float* singleton = NULL;
if (singleton == NULL)
{
singleton = malloc(count * sizeof(float));
}
return singleton;
}
然而,如果你把它放在你的标题,你运行的危险得到链接时间重复的符号。如果将其设为静态,则在包含头的每个编译单元中定义的功能都将相同。
然而,正如olaf所观察到的,malloc的参数是常量,因此您可以定义一个静态数组:
static float data[10 * 10];
但是,仍然会为每个编译单元获得一个新实例。
我会将它(数组或函数)添加到一个新的.c文件中,并在头中放置一个extern def,然后将c文件添加到link stage。