[英]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.