是否可以在运行时为宏分配地址

Is it possible to assign an address to a macro during a runtime?

本文关键字:分配 地址 运行时 是否      更新时间:2023-10-16

假设header.hpp中定义了一个宏MY_MACRO。通常,我可以用覆盖source.cppheader文件中的宏定义

//source.cpp
#include "header.hpp"
#undef MY_MACRO
#define MY_MACRO 0x080000

现在,我在函数中有一个数组(myData(,并想将数组的起始地址分配给MY_MACRO。我试着像下面这样做,但不起作用:

void testFunction()
{
uint8_t myData[5] = {1,2,3,4,5};
#undef MY_MACRO
#define MY_MACRO &myData
const uint8_t *dataPointer = reinterpret_cast<uint8_t *>(MY_MACRO);
#undef MY_MACRO
#define MY_MACRO 0x080000
}

可能的方法是什么?

是否可以在运行时为宏分配地址?

否。预处理器宏在预处理时进行处理,预处理发生在编译之前,也发生在运行时之前。

然而,你写的确实有效。预处理后,生成的c++将是:

uint8_t myData[5] = {1,2,3,4,5};
const uint8_t *dataPointer = reinterpret_cast<uint8_t *>(&myData);