宏中的“(x)”项是什么

What is the "(x)" term in macro

我找到了如下所示的结构定义,

#define MAX_SIZE(x) 1

struct var
{

    int temp;
    int temp2[MAX_SIZE(temp)];

};

MAX_SIZE(temp)是什么意思?

temp2数组的维度是多少?

如果您对预处理器在做什么感到好奇,您的编译器可以为您生成预处理文件。例如,使用 gcc -E try.c -o try.i 编译并查看输出。

这个片段足够小,您可以直接执行 gcc -E try.c,但一般来说,如果您包含任何内容,预处理后的输出会变得很长。

这个宏没什么用:你给它的任何东西都会解析为 1

我怀疑这里的目的是记录结构的哪个字段控制 flexible array member 的实际大小。由于 C 无法告诉编译器灵活数组成员的实际大小,因此 MAX_SIZE 忽略其参数是有意的,因为 C 编译器无法使用该信息。它仅供人类读者使用。 (这 应该 MAX_SIZE 定义上方的文档注释中进行解释。)

编写代码的人通过使用 really 灵活数组成员的旧符号来混淆问题:既不是 C99 认可的语法 temp2[] 也不是旧的 GNU 扩展 temp2[0],但你在 pcc, temp2[1]. Are you looking at the source code to a very old program? Is it still using old-style function definitions 的日子里写的方式?

无论如何,你应该理解struct var的定义是

struct var
{
    int temp;
    int temp2[temp];
};

...在 C 的反事实版本中,您当然可以在其中实际编写它。