小编Mar*_*nho的帖子

具有状态的 C 宏

C 宏是否可以具有任何状态?在本例中,为整数值。

我希望能够从静态分配的缓冲区中分配一些内存,因为我处于嵌入式环境中。假设我有一个像这样的结构和一个缓冲区:

double buffer[1000];

typedef struct {
    int rows;
    int cols;
    double* data;
} matrix;
Run Code Online (Sandbox Code Playgroud)

我想要一个可以生成矩阵并从相关缓冲区分配相关内存的宏。然而,我似乎想不出一种方法来保存内部计数器来确定我们目前应该在缓冲区中的位置。理想情况下,宏应该是这样的:

#define alloc_matrix(_rows, _cols) {.rows = _rows, .cols = _cols, .data = &buffer[PTR]}
Run Code Online (Sandbox Code Playgroud)

其中 PTR 是编译时间常数,每次使用 alloc_matrix 时都会不断变化(按行 * 列增加)。这将允许我在编译时使用 _Static_assert 之类的东西检查所有内容是否适合缓冲区,而不是在运行时检查所有内容。

这可以用 C 预处理器实现吗?

我尝试过使用 C 预处理器,但似乎找不到在宏中存储状态的方法。

c preprocessor

1
推荐指数
1
解决办法
133
查看次数

标签 统计

c ×1

preprocessor ×1