c - #define 在编译时创建一个警告

标签 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);

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

最佳答案

在文件范围内声明的变量的初始值设定项必须是常量表达式。函数调用(在您的例子中是 strlen)在 C 中永远不是常量表达式。

你可以替换:

int max_size = size_aspid+strlen(replace_aspid);

int max_size = size_aspid + (sizeof replace_aspid - 1);

sizeof 是一个运算符而不是一个函数,这里是一个常量表达式。

关于c - #define 在编译时创建一个警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015546/

相关文章:

c - Bind 在内核空间内部如何工作?

c - glibc和相同代码的性能差异

linux - 在 darwin for linux 上交叉编译 CGO 应用程序

python - 子进程 check_output 上的路径

c - C 中的 Posix 正则表达式

c - 如何从调试符号中找到已编译的变量/函数地址

objective-c - 有没有更好的方法来删除 objective-c 中的停用词?

c - 为什么某些格式说明符在 Visual Studio 2010 的 strftime 中不可用?

python - 带有无效返回参数的 SWIG、Python、C

linux - 使用分隔符连接多个 yaml 文件