C符号常数+结构

时间:2013-02-23 19:58:30

标签: c constants structure

给出以下代码片段:

#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?”

----不是为什么一个人也想要,但是如何/为什么它会起作用。为什么它是其他词中的有效代码,不一定是有效的逻辑。 -Clarification

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

3 个答案:

答案 0 :(得分:2)

正如Armin所指出的,令牌MAX_SIZE被预处理器取代。但是为了澄清,这不是它最终工作/编译的原因。编译它的实际要求是,数组大小是常量整数表达式,它适用于有问题的代码。

答案 1 :(得分:1)

当编译代码并且行变为

时,MAX_SIZE被替换为100
int tackles[100 + 1];

相同
int tackles[101];  



来自documentation

要定义预处理器宏,我们可以使用#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]; 

答案 2 :(得分:0)

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