gpt4 book ai didi

c 具有参数列表但没有替换列表的类似函数的宏?

转载 作者:行者123 更新时间:2023-12-04 05:57:46 25 4
gpt4 key购买 nike

一位同事让我解释一下 memcached 中的一些 C 代码.我现在承认我也不理解它。

它与类似 C 函数的宏定义有关,其参数也没有替换列表。例如,从 memcached.c 的第 2751 行开始:

            if (return_cas)
{
MEMCACHED_COMMAND_GET(c->sfd, ITEM_key(it), it->nkey,
it->nbytes, ITEM_get_cas(it));
/* Goofy mid-flight realloc. */
if (i >= c->suffixsize) {
char **new_suffix_list = realloc(c->suffixlist,
sizeof(char *) * c->suffixsize * 2);
if (new_suffix_list) {
c->suffixsize *= 2;
c->suffixlist = new_suffix_list;

MEMCACHED_COMMAND_GET() 在 trace.h 的第 23 行定义:
#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2, arg3, arg4)

带参数的 C 宏函数式定义,好的。没有替换列表。

memcached.c 上 cpp 的输出显示类似函数的宏变成了 ';':
# 2751 "memcached.c"
if (return_cas)
{
;


if (i >= c->suffixsize) {
char **new_suffix_list = realloc(c->suffixlist,
sizeof(char *) * c->suffixsize * 2);
if (new_suffix_list) {
c->suffixsize *= 2;
c->suffixlist = new_suffix_list;

有没有人知道为什么程序员会包含类似函数的宏,而没有像 MEMCACHED_COMMAND_GET() 这样对生成的代码没有影响的替换列表?这样做的目的是什么?提前谢谢你。

最佳答案

在 Solaris 和 Mac OSX 上,它被替换为触发 DTrace 探测器,因此它扩展到其他内容。

关于c 具有参数列表但没有替换列表的类似函数的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315116/

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