包括c中结构中的文本文件

时间:2015-04-12 15:50:14

标签: c include c-preprocessor

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

struct student
{
  #include "test"
};

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

UU2(testing,value,21);

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

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

在没有UU2的上下文或定义的情况下,无法确定此处发生了什么是不可能的,但这看起来很像普通的C模式X macros。通常情况下,包含文件中的行数会更多。

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

相反,X宏具有多个定义 - >的关系。 一个输入。输入表示为宏调用块,然后周围的代码用于为宏设置合适的定义,以便这些应用程序扩展为有用的东西。这具有以下优点:可以将相同的调用块重复粘贴到程序内的不同上下文中,其中已经建立了对其控制宏的不同定义,以创建相同基本输入数据的不同扩展。例如相同的输入块(" 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"

将宏语句块放在自己的文件中,可以很容易地#include进入多个不同的扩展上下文,允许单个结构化数据定义具有多个应用程序。将公共结构集中在一个文件中可以通过立即将数据结构中的任何变化传播到它在程序中随处解释的方式来帮助维护。

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

为什么这个模式被用在这里,似乎只有一行,UU2只有一个定义?那么,同样的原则仍然可以应用 - 即使程序当前没有在多个位置应用结构化数据,它仍然意味着无论什么过程/人生成它都不需要知道< / em>关于C程序如何解释它们提供给它的纯粹抽象结构的任何内容。他们只关注布局,不需要知道它是一个类型定义的一部分,以及如何将其编辑成源文件(或者C有类型定义之类的东西,甚至程序是用C语言编写的) )。它们提供抽象的结构和价值,C程序将对数据施加自己的意义。