【问题标题】:How to change a MACRO definition at runtime如何在运行时更改宏定义
【发布时间】:2016-07-19 17:30:45
【问题描述】:

假设我有一个类似于下面的宏定义:

#define info <TLS slot for thread>.info

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

info_t info;

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

如何在运行时更改 info 的定义,使其指向 MACRO 值或取决于线程的声明?

这是一个多线程环境。

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

【问题讨论】:

  • “运行时”是什么意思?甚至在实际编译之前就对宏进行评估 - 这就是为什么它被称为 preprocessing。这在每个 C 编程介绍中都有解释。
  • “MACRO”和“runtime”是不兼容的术语。
  • 我不认为你可以这样做,但我之前错了:)

标签: c windows multithreading macros


【解决方案1】:

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

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

【讨论】:

  • 如果宏正在调用一个函数会告诉我们线程 TLS 槽是否已初始化。我们可以使用某种条件宏吗?
  • @Rach 为什么你认为你需要 macro 开始?任何使用宏的代码都可以在没有它的情况下重写,只需扩展内联宏即可。因此,编写没有宏的代码,首先,只有然后考虑宏是否有帮助。
猜你喜欢
  • 2011-02-15
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
相关资源
最近更新 更多