给出以下代码片段:
#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
我不确定如何详细回答这个问题。任何帮助将不胜感激。
答案 0 :(得分:2)
正如Armin所指出的,令牌MAX_SIZE
被预处理器取代。但是为了澄清,这不是它最终工作/编译的原因。编译它的实际要求是,数组大小是常量整数表达式,它适用于有问题的代码。
答案 1 :(得分:1)
当编译代码并且行变为
时,MAX_SIZE被替换为100int 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];
答案 2 :(得分:0)
可能是因为tackles
是一个以终结符值(例如-1)终止的数组,类似于C字符串由空字符终止的方式。注意结构没有表示铲球数量的成员。