gpt4 book ai didi

c - 在c中的结构中包含一个文本文件

转载 作者:太空狗 更新时间:2023-10-29 15:40:37 25 4
gpt4 key购买 nike

有一个包含文本文件的结构。

struct student
{
#include "test"
};

test 是一个包含以下信息的纯 ASCII 文本文件

UU2(testing,value,21);

我不确定这是什么意思,以及通过在结构中包含文本文件我们可以获得什么好处。

谁能帮我解决这个问题?

最佳答案

如果没有上下文或 UU2 的定义,就不可能确定这里发生了什么,但这看起来很像称为 X macros 的常见 C 模式。 .通常包含的文件中会有更多行。

X 宏用于反转运算符和操作数之间的关系(即宏和数据之间)。对于普通宏,关系是一个定义 -> 多个输入,即 #define M()... 后面将是 M(foo)M(bar)等贯穿整个代码;一个 M 操作重复应用于多个不同的输入。

相比之下,X 宏具有多个定义 -> 一个输入 的关系。输入表示为宏调用 block ,然后周围的代码开始为宏设置合适的定义,以便这些应用程序扩展为有用的东西。这样做的好处是可以将相同的调用 block 重复粘贴到程序中的不同上下文中,在这些上下文中已经为其控制宏设置了不同的定义,以创建相同基本输入数据的不同扩展。例如相同的输入 block (在“block.x”中):

M(one, 7);
M(two, 8);
M(three, 9);

...可以解释为结构声明、结构初始化或结构元素上的展开循环,具体取决于它所处的上下文以及当时 M 的可见定义点:

// context 1: declare a struct
#define M(N, V) int N;
struct foo {
#include "block.x"
};

// context 2: initialize a struct
#define M(N, V) .N = V,
struct foo f = {
#include "block.x"
};

// context 3: do something to a struct
#define M(N, V) if(THIS.N==8)puts("eight!");else puts("not eight");
#include "block.x" // prints "not eight", "eight!", "not eight"

将宏语句 block 放在它自己的文件中可以很容易地将它#included 到多个不同的扩展上下文中,从而允许单个结构化数据定义具有多个应用程序。将通用结构集中在一个文件中有助于提高可维护性,方法是立即将数据结构中的任何更改传播到程序中各处的解释方式。

(#include 不是唯一的方法,但它是常见的模式)

为什么这个 patten 被用在这里,看起来只有一行而且只有一个 UU2 的定义?好吧,同样的原则仍然适用——即使程序当前没有在多个位置应用结构化数据,它仍然意味着生成它的任何进程/人不需要知道任何东西关于 C 程序如何解释它们提供给它的纯抽象结构。他们可以只关注布局,不需要知道它构成类型定义的一部分以及如何将其编辑到源文件中(或者 C 有类型定义之类的东西,甚至程序是用 C 编写的).它们提供抽象结构和值,C 程序将自己的含义强加给数据。

关于c - 在c中的结构中包含一个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29591344/

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