gpt4 book ai didi

c - 为什么要使用只返回常量而不是只使用常量的函数?

转载 作者:太空狗 更新时间:2023-10-29 14:56:54 24 4
gpt4 key购买 nike

我在 GitHub 上遇到了一些代码。 https://github.com/codeplea/tinyexpr/blob/master/tinyexpr.c

这些行引起了我的注意:

static double pi(void) {return 3.14159265358979323846;}
static double e(void) {return 2.71828182845904523536;}

在这种情况下是否有任何理由使用函数?为什么不使用常量?您可以使用预处理器宏,但这会使调试变得更加困难。我以前从未见过这个。这有什么好处吗?

最佳答案

我能想到的主要原因是为了更容易搜索使用该常量的位置。例如,您搜索 e( 而不是 e

然而,这里不是这种情况。正在使用函数,但未明确调用。

链接的代码包含一个结构数组:

typedef struct te_variable {
const char *name;
const void *address;
int type;
void *context;
} te_variable;

...

static const te_variable functions[] = {
/* must be in alphabetical order */
{"abs", fabs, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"acos", acos, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"asin", asin, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"atan", atan, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"atan2", atan2, TE_FUNCTION2 | TE_FLAG_PURE, 0},
{"ceil", ceil, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"cos", cos, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"cosh", cosh, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"e", e, TE_FUNCTION0 | TE_FLAG_PURE, 0},
{"exp", exp, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"fac", fac, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"floor", floor, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"ln", log, TE_FUNCTION1 | TE_FLAG_PURE, 0},
#ifdef TE_NAT_LOG
{"log", log, TE_FUNCTION1 | TE_FLAG_PURE, 0},
#else
{"log", log10, TE_FUNCTION1 | TE_FLAG_PURE, 0},
#endif
{"log10", log10, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"ncr", ncr, TE_FUNCTION2 | TE_FLAG_PURE, 0},
{"npr", npr, TE_FUNCTION2 | TE_FLAG_PURE, 0},
{"pi", pi, TE_FUNCTION0 | TE_FLAG_PURE, 0},
{"pow", pow, TE_FUNCTION2 | TE_FLAG_PURE, 0},
{"sin", sin, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"sinh", sinh, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"sqrt", sqrt, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"tan", tan, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{"tanh", tanh, TE_FUNCTION1 | TE_FLAG_PURE, 0},
{0, 0, 0, 0}
};

每个结构的第二个成员是一个函数指针,用于运行一些与数学相关的函数,E 和 PI 的值就在其中。所以看起来它们被定义为符合这个框架的函数。

关于c - 为什么要使用只返回常量而不是只使用常量的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56400631/

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