如何在运行时更改MACRO定义

时间:2016-07-19 17:30:46

标签: c windows multithreading macros

假设我的宏定义如下:

#define info <TLS slot for thread>.info

如果没有为线程定义TLS区域,则需要

info_t info;

void foo()
{
    info.details = 0;
    ....
}

如何在运行时更改info的定义,以便它根据线程指向MACRO值或声明?

这是一个多线程环境。

我们在函数foo()中使用info,并且无法更改此代码。有没有办法可以根据需要将其设置为指向宏或声明?如果需要,我们可以重命名宏和decl。

1 个答案:

答案 0 :(得分:1)

预处理器在编译时处理C中的宏。在编译代码之后(实际上在预编译之后)宏不再存在。因此,在运行时修改宏是不可能的。

而不是宏,你应该有一个全局数组,其中每个元素包含特定线程的数据并对其进行操作。