有一个包含文本文件的结构。
struct student
{
#include "test"
};
测试文件是一个纯ASCII文本文件,包含以下信息:
UU2(testing,value,21);
我不确定将文本文件包含在结构中意味着什么,以及我们将从中获得什么好处。
请问有人能帮助解答这个问题吗?
有一个包含文本文件的结构。
struct student
{
#include "test"
};
测试文件是一个纯ASCII文本文件,包含以下信息:
UU2(testing,value,21);
我不确定将文本文件包含在结构中意味着什么,以及我们将从中获得什么好处。
请问有人能帮助解答这个问题吗?
没有上下文或UU2
的定义,很难确定这里发生了什么,但这看起来很像通常称为X宏的常见C模式。通常包含文件中会有更多行。
X宏用于颠倒运算符和操作数之间的关系(即宏和数据之间的关系)。使用普通宏,关系是一个定义 -> 多个输入,即#define M()...
将在代码中跟随M(foo)
、M(bar)
等等;一个M
操作被重复地应用于多个不同的输入。
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"
grep -r '#define.*UU2' ./include/
的命令。 - tivnUU2
很可能是一个宏。#include
和其他预处理指令可以放在任何独立的行上;预处理器不知道底层 C 语法,并在 C 编译器看到代码之前解析宏和包含文件。许多编译器有一个标志,允许您查看预处理后的源代码,例如gcc -E stuff.c
。 - M Oehm