gpt4 book ai didi

C 使用#define 指向或别名函数

转载 作者:太空狗 更新时间:2023-10-29 15:00:28 25 4
gpt4 key购买 nike

我对是否可以使用#define 指向一个函数感到有点困惑。我有一个编解码器/DSP,其工具会自动生成如下代码页面:

SIGMA_WRITE_REGISTER(address, data, length);
SIGMA_WRITE_REGISTER(address, data, length);
SIGMA_WRITE_REGISTER(address, data, length);
....

然后在另一个 .h 文件中他们这样做:

    #define SIGMA_WRITE_REGISTER( address, data, length ) {
/*TODO: implement macro or define as function*/}

这很有帮助,没有定义任何关于写入寄存器的内容。这很好,尽管为我的微 Controller 编写了一些代码以通过 I2C 写入寄存器并且这似乎有效。现在我不想只将该代码粘贴到上面的定义中并让它实例化 1000 次。我希望我可以使用 is define 作为我的函数的别名?

类似于:

#define SIGMA_WRITE_REGISTER(address, data, length) { my_i2_c_func(address, data, length)}

我试过这样的东西并编译了,但我不太确定它是否有效。这是正确的做法还是我找错了树?

最佳答案

是的,您当然可以使用 #define 来指向一个完整的函数或别名。

考虑下面一个更简单的例子,只是为了理解

#define STRLEN(x) my_strlen(x)

int my_strlen(char *p)
{
// check for NULL pointer argument?
int x;

for (x = 0; *p++; x++);

return x;
}

现在,在您的代码中,您可以根据需要使用 STRLEN

注意:关于 { } 的存在,您可以去掉它们,或者使用 do..while 循环,或者将函数定义为一部分宏本身。选择是你的。但是,由于在预处理阶段扩展了 MACRO [类似于文本替换],您需要格外小心 {}; 的使用。 MACRO 的使用不应破坏代码。

关于C 使用#define 指向或别名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com