gpt4 book ai didi

仅当包含 x.h 文件时才调用类似自由的函数

转载 作者:行者123 更新时间:2023-11-30 17:44:38 25 4
gpt4 key购买 nike

我有三个 *.h 文件:

啊:

<some types>
extern sometype1 somevar1;

B.h:

<some types>
extern sometype2 somevar2;

C.h:

<some types>
extern sometype3 somevar3;

我有 D.c 文件:

#include "A.h"
#include "B.h"
#include "C.h"

int freethemall()
{
TheFunctionFromAhFileForFreeingTheSomevar1Resources();
TheFunctionFromBhFileForFreeingTheSomevar2Resources();
TheFunctionFromChFileForFreeingTheSomevar3Resources();
}

这个项目是某种框架。

有时我不需要所有模块 - A、B 或 C,例如,我只需要 A 和 B 模块。但我的框架初始化的结构如下:

#include "A.h"
#include "B.h"
<Frameworkname>Init();

<do some code here>

<Frameworkname>Free();

因此,从每个模块调用所有 Free 函数而不是仅调用一个 ...Free() 函数是非常非常不舒服的:

#include "A.h"
#include "B.h"
<Frameworkname>Init();

<do some code here>

<Frameworkname><modulename1>Free();
<Frameworkname><modulename2>Free();
..
<Frameworkname><modulenameN>Free();

在本例中,N 只有 2,但我有大约 20 个模块,因此将它们全部计数对程序员来说并不友好。

如何更改 freethemall() 函数以仅调用我使用和包含的模块的析构函数?请注意,D.h 包含该函数,并且有很多模块包含 D.h。

附注如果需要的话,我可以在每个其他模块中包含 D.h 模块。

作为解决这个问题的其他方法,我需要一个在模块完成之前调用的函数,就像在最后的 Delphi 语言中一样:

Unit ...

Finalization
Callme;
End.

不需要从 freethemall() 调用它,但它是解决这个问题的某种线索。

感谢您的建议。

最佳答案

两种方式:

  1. “黑客”是在每个模块中执行 #define,或者如果您无权访问模块的代码,请执行 #define USE_A 和 ifdef USE_A 以实际包含 header 。因此,更改 #define 将确定 header 是否被包含,并且释放函数将检查相同的定义。

  2. 正确的方法是使用一个函数来“注册”您需要释放的项目。指针数组。因此,当您创建每个数组时,您可以添加它的指针或指向将其释放到数组的函数的指针,然后当您需要释放时,只需循环遍历数组并释放其中的每个数组即可。

关于仅当包含 x.h 文件时才调用类似自由的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19911079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com