gpt4 book ai didi

c - 函数或宏定义使用哪一个

转载 作者:行者123 更新时间:2023-12-01 22:46:16 24 4
gpt4 key购买 nike

我有一些经常使用的宏

所以我在想,在我的情况下,是使用函数更好还是使用宏定义更好?

我使用的宏代码示例:

#define Test(Id, TName, i, FName, var1, var2, var3) do { \
if (GetTable(Id, TName)) { \
while (i < 5) { \
if (GetField(Id, FName)) { \
const char *user = PushName(Id, FName); \
if (!CheckNameisValid(user)) \
continue; \
var1 = GetTimestamp(user); \
var2 = GetSex(user); \
var3 = GetCntLogin(user); \
i++; \
} \
} \
} \
} while (false);

按照上面的代码,用什么会更好?

继续使用宏定义还是迁移到函数?

最佳答案

鉴于宏的编写方式,为此目的使用函数会好得多。宏不使用任何构造,例如引用名称作为参数传递给宏的结构成员。

宏有多个问题:

  • 变量 i 假定已被适本地声明和初始化,但只有当 CheckNameisValid(user) 不为零时它才会递增,可能导致无限循环。

  • ; 不应作为宏扩展的一部分以允许用作单个表达式语句。

  • 不清楚变量var1,var2,var3应该更新一次还是多次,调用者有作为此宏的副作用,无法判断实际发生了什么。

最好用清晰的语义定义函数。甚至不用担心内联函数,现代编译器可以确定哪些函数值得内联,即使没有这样定义也是如此。

关于c - 函数或宏定义使用哪一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75276031/

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