#define在编译时创建警告

时间:2015-05-03 15:21:07

标签: c linux gcc

我试图按如下方式编写代码:

在头文件中: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);

我哪里出错了。感谢!!!!!!!!!!!

1 个答案:

答案 0 :(得分:0)

假设int max_size是全局定义的,您可能不会使用函数来初始化它。

strlen(replace_aspid)

不是常数,至少不是在C语境中。

要解决此问题,请使用

(sizeof replace_aspid - 1) /* Thanks to ouah for the -1! :-) */

代替。它在编译时进行评估,并由编译器视为常量。