簡體   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