【发布时间】:2017-01-21 08:05:44
【问题描述】:
我有一个如下宏。
#define WR_BLK_SIZE_REGINFO 123
我在库项目 (.a) 中使用此宏。库项目是预编译的,其中“WR_BLK_SIZE_REGINFO”的大小无法更改,因为它是在库项目中静态分配的。
现在如何动态分配预处理器指令代码?
我想要像下面这样的东西。这可能吗?
#define WR_BLK_SIZE_REGINFO malloc
如果感到困惑,让我简要介绍一下。
- 这个宏的用途是什么?
Ans: 这个宏用于我的库项目的各种文件中。为了降低代码复杂度,我使用宏来修复大小
- 为什么要 malloc 宏?
Ans:我正在做一个库项目,这个库项目将在许多控制器中使用。每个控制器都有自己的内存集。所以我不能静态地修复那个宏的大小。因为它需要根据控制器的内存而变化。
演示一些代码?
Sample.h
#define WR_BLK_SIZE_REGINFO 123
sample.c
if( !((numItems >= 1) && (numItems <= WR_BLK_SIZE_REGINFO)) )
{
// logic
}
sample1.c
if( !((numItemsWrite >= 1) && (numItemsWrite <= WR_BLK_SIZE_REGINFO)) )
{
// logic
}
注意1:以上所有文件都是预编译的库文件,“123”在这里是固定的,我不希望它被修复。我想动态分配。
注意2:我不确定 malloc 是否是正确的选择。我只需要在库项目的运行时或应用程序项目的编译期间输入“123”(从应用程序项目到库项目输入 123)
注意3:库项目是使用MPLAB X IDE构建的,基本上它是一个微芯片项目。
【问题讨论】:
-
为什么不只是
int WR_BLK_SIZE_REGINFO = 123;? -
我需要宏,因为 WR_BLK_SIZE_REGINFO 已在 1000 个地方使用,并且在不同的文件中至少有大约 10-15 个文件
-
这与宏的工作方式相同,不是吗?您显示的示例代码应该仍然有效。当然,任何假定 WR_BLK_SIZE_REGINFO 是编译时间常数的代码都必须重写,但这是不可避免的。
-
这是有道理的。不过,您对 malloc w.r.t 的看法是什么? int WR_BLK_SIZE_REGINFO = 123;我们不能使用编译时间动态分配这 123 吗?
-
老实说,我不知道你在说什么。您有一些空间来存储旧值,代码希望在其中获取该值。您希望它看起来相同并获得新值。因此,您需要将存储的值(在他们正在查找的位置)从旧值更改为新值。分配从何而来?
标签: c malloc microchip mplab .a