在一个更大的项目中,我要编写一个在相同内存结构上工作的 C 函数列表。由于这些函数在代码的非常不同的部分(以及在单独编译然后链接的不同库中)调用,我想避免必须将指向内存结构的指针作为参数传递给我的每个函数调用。
我正在考虑将内存结构作为静态变量存储在单个函数中,并始终在我的其他函数中调用该函数以获取指向内存结构的指针。在下面的示例中,我使用storage()
来设置sto
指针。
我测试了下面的代码,它似乎工作正常。这是标准方法吗?我有什么风险?这会一直有效吗?更好的解决方案?
我的函数没有并发调用。当然,我也应该释放分配的内存。
#include <stdio.h>
#include <stdlib.h>
int* storage(int get_set)
{
static int* sto;
if (get_set==1)
{
sto=malloc(2*sizeof(int));
sto[0]=1;
sto[1]=2;
}
printf("storage: content = %d %d, pointer= %d\n", sto[0], sto[1], sto);
return sto;
}
void add11()
{
int* sto =storage(0);
sto[0]+=1;
sto[1]+=1;
printf("add11: content = %d %d, pointer= %d \n", sto[0], sto[1], sto);
}
void multo0()
{
int* sto =storage(0);
sto[0]=sto[1]*sto[0];
sto[1]=0;
printf("multo0: content = %d %d, pointer= %d\n", sto[0], sto[1], sto);
}
int main(void) {
storage(1); // initialize memory only once
add11(); // work on memory
multo0();
add11();
// ...
return 0;
}
我想要这样的原因如下:
我正在编写的函数集执行图像增强的单独和辅助可选任务,并以不同方式从先前观察到的图像中学习。 sto
存储此学习和参数化选项的内存。
在整个项目中,我的函数将在多个嵌套函数调用中调用。作为参数传递sto
意味着在项目的主体中声明一个指针并更改大量与我的函数执行的任务无关的核心嵌套函数以传递附加参数。
此外,同一组功能将集成到多个略有不同的项目中,因此侵入性较小的集成,必须尽可能少地修改外部代码,将是一个加分项。
对于可读性问题,所有且只有访问共享内存的函数具有相同的前缀。我知道这不是完整的解决方案,但我相信它增加了一点可读性。
除了更改所有功能以在项目周围进行之外,是否还有其他选择sto
?