Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在文件范围处可变修改错误_C - Fatal编程技术网

C 在文件范围处可变修改错误

C 在文件范围处可变修改错误,c,C,我有一个完美的工作程序,它有以下结构 typedef struct SERVER{ int id; char ip_addr[MAX_IP + 1]; int port; }SERVER; 最大IP在头文件中定义 #define MAX_IP strlen("255.255.255.255") 这段代码在我的本地机器上运行良好。当我将其上传到服务器时,我得到了以下编译错误 objs.h:4:10: error: variably modified ‘ip_addr’

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

typedef struct SERVER{
    int id;
    char ip_addr[MAX_IP + 1];
    int port;
}SERVER;
最大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\u IP+1
必须是一个整数常量,在C中,函数调用(您的
MAX\u IP
被定义为
strlen(“255.255.255.255”)
)不是常量

要解决您的问题,您可以使用此定义的
MAX\u IP

#define MAX_IP  (sizeof "255.255.255.255" - 1)
它具有相同的值,是一个整型常量

strlen("255.255.255.255")

这不是一个常数。因此,尝试使用可变长度数组是违反规则的。

由于您总是使用固定字符串的strlen,是否可以将MAX_IP的定义更改为常量,而不是在每次使用宏时嵌入函数调用?如果标头的用户没有(或不能)内置标准库,则他们将遇到问题


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

感谢您指出,并进行了更新。@antipthesis-不,这不是一个常数。它是函数调用的返回值。那么我如何重新构造代码呢。此外,它在本地工作正常。@Antitthesis使用
(sizeof“255.255.255.255”-1)
,这是一个常量,具有相同的值。@Antitthesis则编译器不遵循C标准。具有函数返回值长度的数组在C.@Anthesis中是非法的,因此如何重新构造此代码。strlen()的作用是什么?