this is my source code in C language i want to definition basic data using static, out side the function
#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;
}
but i got (initializer element is not constant) error
and this is my compile result
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
i know that i can use malloc
inside a function and insert the data into the (addr_list) but i want to insert it directly without any dynamic allocation. what is the problem? why i get error like this !
Yes, using compound literals in this way is non-standard, they are not considered "constants" but objects. The right tool are designated initializers. E.g for your type
host_t
an initializer would look like