gpt4 book ai didi

c - 宏访问没有类型定义的结构成员

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:56 26 4
gpt4 key购买 nike

我碰到了这个宏定义。

#define CMD_CTX (cmd->ctx)

我了解它的功能。它正在尝试从以下代码段中的结构“command_invocation”访问成员“ctx”。我知道这是因为“command_invocation”是我的代码中唯一具有“ctx”成员的结构。令人困惑的是为什么没有提及输入参数的类型。

struct command_invocation {
struct command_context *ctx;
struct command *current;
const char *name;
unsigned argc;
const char **argv;
};

现在CMD_CTX的调用如下

command_context_mode(CMD_CTX, COMMAND_EXEC);

这个函数的定义是

int command_context_mode(struct command_context *cmd_ctx, enum command_mode mode)

我了解返回值匹配。但我不清楚的是输入参数是如何在这个调用“command_context_mode(CMD_CTX, COMMAND_EXEC);”中确定的。

最佳答案

宏只是命名的文本片段。因此,它们只是在预处理器真正编译之前被它们的内容替换。所以在你的情况下调用函数

command_context_mode(CMD_CTX, 

将替换为

command_context_mode((cmd->ctx), 

请注意,宏定义中的“(”和“)”也会出现在这里。我有意没有显示调用的第二个参数,因为它看起来像是另一个您未提供定义的宏。

因此,宏不需要知道任何关于类型的信息,因为它们只替换文本。但是编译器会在替换发生后检查类型匹配。

恕我直言,这种类型的宏使用只会让程序更难阅读和更困惑(就像它对你所做的那样)。不要使用它。

关于c - 宏访问没有类型定义的结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46166334/

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