宏中的“(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 的反事实版本中,您当然可以在其中实际编写它。
我找到了如下所示的结构定义,
#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 的反事实版本中,您当然可以在其中实际编写它。