gpt4 book ai didi

C、这条线是做什么的?

转载 作者:行者123 更新时间:2023-12-02 08:35:01 25 4
gpt4 key购买 nike

我在 codegolf 的一个主题中看到了这行代码。

struct { int (*log)(const char *,...); } console = { printf };

这是原帖 https://codegolf.stackexchange.com/questions/24623/write-program-in-your-favorite-language-in-another-language虽然我知道c/c++,但我无法理解这一行。我想创建同义词,你使用 typefs ,所以这是什么 (console={printf})。另外,我根本不了解结构。为什么是一个结构体,里面发生了什么……这是指针的转换吗?这是什么……我们在里面看到了什么?

最佳答案

那么,让我们从外而内地工作:

struct { T m; } console = { i };

您正在定义一个匿名结构类型,其中包含 T 类型的单个成员 m,然后使用该类型声明一个名为 console 并使用初始化程序 { i } 对其进行初始化。

那么什么是Tmi

成员声明

int (*log)(const char *, ...);

分解为

      log                         -- log
(*log) -- is a pointer to
(*log)( ) -- a function
(*log)(const char *, ...) -- taking a fixed parameter of type
const char *, followed by a variable
number of parameters
int (*log)(const char *, ...); -- returning int

所以,成员m被命名为log,它的类型Tint (*)(const char *, ...)

初始化表达式是

{ printf }

printf 的原型(prototype)是

int printf(const char *, ...);

除非它是 sizeof 或一元 & 运算符的操作数,否则类型为“函数返回 T”的函数指示符将是转换为“返回 T 的函数指针”类型的表达式。因此,初始化器中表达式 printf 的类型是

int (*)(const char *, ...);

看起来很眼熟?这与 log 成员的类型相同。

TL;DR 版本

您正在创建一个结构类型,其中包含一个名为 log 的成员,该成员用于指向类似 printf 的函数。它会像这样使用:

struct { int (*log)(const char *, ...); } console = { printf };
...
console.log("%s\n", "This is a test");

关于C、这条线是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612922/

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