繁体   English   中英

在文件范围错误时可变修改

[英]Variably modified at file scope error

我有一个完美的工作程序,它具有以下结构

typedef struct SERVER{
    int id;
    char ip_addr[MAX_IP + 1];
    int port;
}SERVER;

MAX_IP 在头文件中定义。

#define MAX_IP strlen("255.255.255.255")

这段代码在我的本地机器上运行良好。 我将它上传到服务器的那一刻,我收到以下编译错误。

objs.h:4:10: error: variably modified ‘ip_addr’ at file scope
     char ip_addr[MAX_IP + 1];

什么可能是错误的。

typedef struct SERVER{
    int id;
    char ip_addr[MAX_IP + 1];
    int port;
}SERVER;

上面的结构定义在 C 中无效,因为不允许结构成员具有不可变长度的数组类型。 MAX_IP + 1必须是整数常量,并且在 C 中,函数调用(您的MAX_IP被定义为strlen("255.255.255.255") )不是常量。

要解决您的问题,您可以改用此MAX_IP定义:

#define MAX_IP  (sizeof "255.255.255.255" - 1)

它具有相同的值并且是一个整数常量。

strlen("255.255.255.255")

不是常数。 因此,您尝试使用可变长度数组违反了规则。

既然你总是取一个固定字符串的 strlen ,那么是否可以将 MAX_IP 的定义更改为常量,而不是每次使用宏时都嵌入一个函数调用? 如果您的标头的用户没有(或不能拥有)内置的标准库,他们就会遇到问题。

如果没有,您能否详细说明服务器和代码工作的机器之间的区别?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM