c - 需要帮助将 C 宏重写为函数

标签 c macros c-preprocessor

我需要一些帮助以一种类型更安全的方式重写以下行并将其重写为一个函数,但是这段代码是在函数内部定义的这一事实让我很难想出一个聪明的方法来做这件事因为显然它会涉及声明多个参数。

#define CHECK(id) if(table->cells[id]) isgood[table->cells[id]-1] = 0;

其中 table 是一个 structisgood 是一个 int

最佳答案

直译(如果table->cells[id]是int):

void check(int id, int*isgood) { if (id) isgood[id-1] = 0; }

调用:

check(table->cells[id], isgood);

但是,我会稍微重命名/修改它。我特别想改名字。也没有错误检查 - 即,如果 table->cells[id]==0,您将尝试设置 isgood[-1],这会很糟糕。

关于c - 需要帮助将 C 宏重写为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/691394/

相关文章:

c - 尝试在十六进制输入中使用小端和大端

c - 为什么数组的地址等于它在 C 中的值?

c++ - 如何设置 Visual Studio 以在全局范围内注册一些#defines?

c++ - C/C++ #define 宏里面的宏?

使用预处理器比较定义的原始数据

C 套接字 - 消息只发送一次

c - 使用 fgets() 读取文件最后一行时出现段错误

c++ - 如何确保不同的 C++ 代码库使用相同的宏?

c 宏,不带引号的标记粘贴

macros - Go:用于编写测试代码的类似 C 的宏