这些是我的max_subarray_data.h
的内容#include<stdlib.h>
int price[]={100,113,110,85,105,102,86,63,81,101,94,106,101,79,94,90,97};
int n=(int)(sizeof(price)/sizeof(int))-1;
int change[]={};
for(int k=1;k<=n;k++) **//here it is giving error-expected identifier or '('**
change[i]=price[i]-price[i-1];
我正在寻找解决此问题的方法!
答案 0 :(得分:2)
您不能将代码放在函数之外,也不应将函数定义放在头文件中。
max_subarray_data.h应包含以下内容:
extern int price[];
extern int change[];
void init_change();
然后创建包含以下内容的max_subarray_data.c
int price[]={100,113,110,85,105,102,86,63,81,101,94,106,101,79,94,90,97};
int change[(sizeof(price)/sizeof(int))-1];
void init_change()
{
int n=(int)(sizeof(price)/sizeof(int))-1;
for(int i=1;i<=n;i++) {
change[i-1]=price[i]-price[i-1];
}
}
然后在main
中,您需要致电init_change()
初始化change
。
编辑:
另请注意,循环现在分配给change[i-1]
而不是change[i]
,否则您将在数组末尾写入一个元素,并且第一个元素将是未初始化的。
答案 1 :(得分:1)
最佳做法是遵循@dbush发布的内容。但如果你坚持,你可以像这样进行宏初始化:
#include <stdio.h>
#define PRICE_0 100
#define PRICE_1 113
#define PRICE_2 110
#define PRICE_3 85
#define PRICE_4 105
#define PRICE_5 102
#define PRICE_6 86
#define PRICE_7 63
#define PRICE_8 81
#define PRICE_9 101
#define PRICE_10 94
#define PRICE_11 106
#define PRICE_12 101
#define PRICE_13 79
#define PRICE_14 94
#define PRICE_15 90
#define PRICE_16 97
int price[]={
PRICE_0, // 0
PRICE_1, // 1
PRICE_2, // 2
PRICE_3, // 3
PRICE_4, // 4
PRICE_5, // 5
PRICE_6, // 6
PRICE_7, // 7
PRICE_8, // 8
PRICE_9, // 9
PRICE_10, // 10
PRICE_11, // 11
PRICE_12, // 12
PRICE_13, // 13
PRICE_14, // 14
PRICE_15, // 15
PRICE_16}; // 16
#define PRICE_DIF(a,b) (PRICE_ ## a - PRICE_ ## b)
int change[]={
0, // <-- what about this? :(
PRICE_DIF(1,0),
PRICE_DIF(2,1),
PRICE_DIF(3,2),
PRICE_DIF(4,3),
PRICE_DIF(5,4),
PRICE_DIF(6,5),
PRICE_DIF(7,6),
PRICE_DIF(8,7),
PRICE_DIF(9,8),
PRICE_DIF(10,9),
PRICE_DIF(11,10),
PRICE_DIF(12,11),
PRICE_DIF(13,12),
PRICE_DIF(14,13),
PRICE_DIF(15,14),
PRICE_DIF(16,15),
};
int main(void){
for(int k=0;k<=17;k++)
printf("%d\n",change[k]);
return 0;
}