C 尝试从讲师处编译程序时出错(定义行中需要符号)

C 尝试从讲师处编译程序时出错(定义行中需要符号),c,arrays,compiler-errors,C,Arrays,Compiler Errors,老师给了我一个模板,然后将代码修改为给定文本的频率直方图。但是,我在编译代码时遇到了错误。我相信编译器指出的错误在代码的开头。错误已截图并附在下面。提前谢谢 错误: test.c:6:25: error: expected declaration specifiers or '...' before '\x20' #define FIRST_PRINTABLE ' ' // Space character code 32, see Etter 2016 text, pp. 418-420

老师给了我一个模板,然后将代码修改为给定文本的频率直方图。但是,我在编译代码时遇到了错误。我相信编译器指出的错误在代码的开头。错误已截图并附在下面。提前谢谢

错误:

test.c:6:25: error: expected declaration specifiers or '...' before '\x20'
 #define FIRST_PRINTABLE ' '  // Space character code 32, see Etter 2016 text, pp. 418-420
                         ^
test.c:8:30: note: in expansion of macro 'FIRST_PRINTABLE'
 #define NUM_PRINTABLE (int) (FIRST_PRINTABLE-LAST_PRINTABLE+1)
                              ^~~~~~~~~~~~~~~
test.c:11:38: note: in expansion of macro 'NUM_PRINTABLE'
 void init_array(int histogram[], int NUM_PRINTABLE);
                                      ^~~~~~~~~~~~~
代码:

/*
*Comp120-实验7:初学者项目--完成此代码
*字符频率分析——读取文本文件并显示频率
*分析
*用于所有可打印字符。
*
*作者:J.Fall
*日期:2017年2月
*/
#包括
#包括
#包括
//可打印字符集的定义
#定义第一个可打印的“”//空格字符代码32,参见2016年文本,第418-420页
#定义最后一个可打印的“~”
#定义可打印数量(int)(第一个可打印-最后一个可打印+1)
//功能原型:
void init_数组(int直方图[],int NUM_可打印);
int sum_数组(常量int直方图[],int NUM_可打印);
bool可打印(字符c);
无效计算频率(字符*文件名,整数直方图[],整数可打印);
无效写入柱状图(整数柱状图[],整数可打印);
文件*openFileRead(字符*文件名);
int main(int argc,char*argv[])
{
如果(argc<2){
printf(“用法:freq inputFile\n”);
出口(-1);
}
int直方图[NUM_PRINTABLE];//计数器数组——每个可打印字符一个计数器
计算频率(argv[1],直方图,可打印数量);
写入柱状图(柱状图,可打印数量);
printf(“程序完成。\n”);
返回0;
}
/*
*将给定长度的整数数组初始化为全零
*/
void init_数组(int直方图[],int NUM_可打印)
{
int i=0;
对于(i=0;i
当预处理器对这两行进行扩展时,它将转换为(您可以在源代码上使用
gcc-E
,以查看它的实际操作):

这显然是一个语法错误。只需在函数中将
NUM\u PRINTABLE
用作常量,而不是参数

除此之外,宏的功能是错误的,应该是错误的

#define NUM_PRINTABLE (LAST_PRINTABLE-FIRST_PRINTABLE+1)

或者该值为负值。(并且您不需要强制转换为
int
,因为字符文字已经是
int

NUM\u PRINTABLE
计算为文字(或者更确切地说是计算常量)。它不能用作参数名。您想实现什么?也请将错误作为文本发布。您可以将代码作为文本发布,对错误也可以这样做。@Jean-Françoisfare-嗯,它可以作为参数传递给调用站点的函数。:Preplace all
int NUM_PRINTABLE
by
int NUM_PRINTABLE
和至少i我不会compile@StoryTeller对!!我站对了。我似乎发现了问题。非常感谢Jean!不客气。我想如果我不这么做,很多其他人都会帮助你的。顺便说一句,检查我的编辑。下面是你的问题应该是什么样子的(根本没有文本图像)
#define NUM_PRINTABLE (int) (FIRST_PRINTABLE-LAST_PRINTABLE+1)

// Function prototypes:
void init_array(int histogram[], int NUM_PRINTABLE);
void init_array(int histogram[], int (int) (' '-'~'+1));
#define NUM_PRINTABLE (LAST_PRINTABLE-FIRST_PRINTABLE+1)