c - 如何在运行时更改宏定义

标签 c windows multithreading macros

假设我有一个如下所示的宏定义:

#define info <TLS slot for thread>.info

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

info_t info;

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

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

这是一个多线程环境。

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

最佳答案

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

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

关于c - 如何在运行时更改宏定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38464967/

相关文章:

c++ - 在 C++ 和 Windows 中使用 XmlRpc

Java 多线程 - 最佳实践

c - 我如何在 win32 平台上用 C 实现时间驱动的任务?

32 位处理器真的可以寻址 2^32 个内存位置吗?

windows - 如何使用批处理脚本对目录中的每个文件执行某些操作

c - 我应该如何处理 sqlite 错误?

c++ - 在 Linux 中使用 PE 节头

java - 为什么 Thread 的子类可以吞下 InterruptedException?

c - 结构字符未正确分配

java - 将数组作为参数传递 : C and Java