在文件范围错误

时间:2015-11-24 21:01:40

标签: c

我有一个完美的程序,它有一个跟随结构

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];

可能出现的问题。

3 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:1)

strlen("255.255.255.255")

不是常数。因此,你通过尝试使用可变长度数组来破坏规则。

答案 2 :(得分:0)

由于你总是使用固定字符串的strlen,是否可以将MAX_IP的定义更改为常量,而不是每次使用宏时都嵌入函数调用?如果标题的用户没有(或者不具备)内置的标准库,则会出现问题。

如果没有,您能详细说明服务器与代码运行的机器之间的差异吗?