簡體   English   中英

C靜態初始值設定項元素不是常量錯誤

[英]C static initializer element is not constant error

這是我的C語言源代碼,我想使用靜態方法定義基本數據

#include <stdio.h>

typedef struct {
    char * URI;
    char * file;
} redirect_t;

typedef struct {
    char * URI;
    char * file;
    long long content_length;
} content_t;

typedef struct {
    content_t contents[10];
    redirect_t redirects[10];
} host_t;

typedef struct {
    unsigned max_requests;
    host_t hosts[10];
} addr_t;

static addr_t addr_list[] = {
        (addr_t) { 24,
            {
                (host_t) {
                    {
                        (content_t) { "URI" },
                        (content_t) { "URI2" },
                        (content_t) { "URI3" },
                    },
                    {
                        (redirect_t) { "URI5" },
                        (redirect_t) { "URI6" },
                        (redirect_t) { "URI7" },
                    }
                }
            }
        }
};

int main() {


    return 0;
}

但是我得到了(初始化元素不是恆定的)錯誤

這是我的編譯結果

C:\Users\x\Documents\C Projects\untitled\main.c:27:26: error: initializer element is not constant
                 (host_t) {
                          ^
C:\Users\x\Documents\C Projects\untitled\main.c:27:26: note: (near initialization for '(anonymous).hosts')
C:\Users\x\Documents\C Projects\untitled\main.c:25:18: error: initializer element is not constant
         (addr_t) { 24,
                  ^
C:\Users\x\Documents\C Projects\untitled\main.c:25:18: note: (near initialization for 'addr_list')
C:\Users\x\Documents\C Projects\untitled\main.c:25:9: error: initializer element is not constant

我知道我可以在函數內使用malloc並將數據插入到(addr_list)中,但是我想直接插入它而沒有任何動態分配。 問題是什么? 為什么我會收到這樣的錯誤!

是的,以這種方式使用復合文字是非標准的,它們不被視為“常量”,而是對象。 正確的工具被指定為初始化器。 例如,對於您的host_t類型,初始化程序看起來像

                {
                    .contents  = { .URI = "URI",  },
                    .redirects = { .URI = "URI5", },
                },

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM