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