我试图按如下方式编写代码:
在头文件中:test.h
#define size_aspid 8
const char replace_aspid[20];
void print_max_length();
在test.c文件中:
const char replace_aspid[] = "replace_aspidiii";
int max_size = size_aspid+strlen(replace_aspid);
void print_max_lenght()
{
printf("Max length is: %d\n",max_size);
}
在main.c文件中:
int main()
{
print_max_length();
return 0;
}
然后编译器说出以下内容:
warning: initializer element is not a constant expression
#define size_aspid 8
note: in expansion of macro ‘size_aspid’
int max_size = size_aspid+strlen(replace_aspid);
我哪里出错了。感谢!!!!!!!!!!!
答案 0 :(得分:0)
假设int max_size
是全局定义的,您可能不会使用函数来初始化它。
strlen(replace_aspid)
不是常数,至少不是在C语境中。
要解决此问题,请使用
(sizeof replace_aspid - 1) /* Thanks to ouah for the -1! :-) */
代替。它在编译时进行评估,并由编译器视为常量。