0

给定以下代码片段:

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 15

typedef struct{
  int touchdowns;
  int interceptions;
  int tackles[MAX_SIZE + 1];        //this is the line in question
}stats;

向我提出的问题是,“为什么这条线 [如上所述] 将可能的铲球数加 1?”

----不是为什么一个人也想要,而是它如何/为什么起作用。为什么它是有效的代码,换句话说,不一定是有效的逻辑。-澄清

我不确定如何详细回答这个问题。任何帮助,将不胜感激。

4

3 回答 3

2

正如 Armin 指出的那样,令牌MAX_SIZE被预处理器替换。但为了澄清起见,这不是它最终工作/编译的原因。编译的实际要求是,数组大小是一个常量整数表达式,它适用于相关代码。

于 2013-02-23T20:14:28.150 回答
1

编译代码时,MAX_SIZE 被 100 替换,该行变为

int tackles[100 + 1];

这与

int tackles[101];  



文档

要定义预处理器宏,我们可以使用#define。它的格式是:

#define identifier replacement

当预处理器遇到此指令时,它会通过替换替换其余代码中出现的任何标识符。这种替换可以是表达式、语句、块或任何东西。预处理器不理解 C++,它只是通过替换替换任何出现的标识符。

#define TABLE_SIZE 100
int table1[TABLE_SIZE];
int table2[TABLE_SIZE]; 

在预处理器替换了 TABLE_SIZE 之后,代码变得等价于:

int table1[100];
int table2[100]; 
于 2013-02-23T20:00:01.810 回答
0

可能是因为tackles是一个由终止符值(例如 -1)终止的数组,类似于 C 字符串由空字符终止的方式。请注意该结构如何没有表示铲球次数的成员。

于 2013-02-23T20:03:12.753 回答