获取指针对已定义结构的初始化作为全局变量
Getting pointer's initialization of defined structs as global variables
我想为不同的 header 结构指针保留内存以便填充它,如下所示:
struct icmp *_icmp_hdr = (struct icmp *) Smalloc(hs_icmp, 0);
struct icmp6_hdr *_icmp6 = (struct icmp6_hdr *) Smalloc(hs_icmp6, 0);
struct ip *_ip_hdr = (struct ip *) Smalloc(hs_ip, 0);
struct ip6_hdr *_ip6_hdr = (struct ip6_hdr *) Smalloc(hs_ip6, 0);
union data_err *_payload = (union data_err *) Smalloc(s_payload, 0);
当 header 的大小结构为:struct icmp, icmp6_hdr, ip...
时出现问题
- 我已经如图所示定义了每个结构的大小(例如
hs_icmp, hs_icmp6, hs_ip, ...
)使用sizeof()
运算符(例如#define hs_icmp sizeof(struct icmp)
)。
当我编译时,每个 header 结构指针都会出错,我不知道如何解决它,例如:
error: initializer element is not constant
struct icmp *_icmp_hdr = (struct icmp *) Smalloc(hs_icmp, 0);
^
不能将函数调用作为全局变量初始化表达式的一部分。
这就是错误消息告诉您的内容。
结构的大小与它无关(而且结构的大小不能为 0,真的)。
您正在尝试使用非常量表达式初始化全局变量。例如你不能这样做:
#include <stdio.h>
int a = 0;
int b = a; //error: initializer element is not constant
int main(void) {
// your code goes here
return 0;
}
但你可以这样做:
#include <stdio.h>
int a = 0;
int main(void) {
int b = a; //OK
return 0;
}
或者这个:
#include <stdio.h>
#define A 0
int b = A; //OK
int main(void) {
return 0;
}
我想为不同的 header 结构指针保留内存以便填充它,如下所示:
struct icmp *_icmp_hdr = (struct icmp *) Smalloc(hs_icmp, 0);
struct icmp6_hdr *_icmp6 = (struct icmp6_hdr *) Smalloc(hs_icmp6, 0);
struct ip *_ip_hdr = (struct ip *) Smalloc(hs_ip, 0);
struct ip6_hdr *_ip6_hdr = (struct ip6_hdr *) Smalloc(hs_ip6, 0);
union data_err *_payload = (union data_err *) Smalloc(s_payload, 0);
当 header 的大小结构为:struct icmp, icmp6_hdr, ip...
- 我已经如图所示定义了每个结构的大小(例如
hs_icmp, hs_icmp6, hs_ip, ...
)使用sizeof()
运算符(例如#define hs_icmp sizeof(struct icmp)
)。
当我编译时,每个 header 结构指针都会出错,我不知道如何解决它,例如:
error: initializer element is not constant
struct icmp *_icmp_hdr = (struct icmp *) Smalloc(hs_icmp, 0);
^
不能将函数调用作为全局变量初始化表达式的一部分。
这就是错误消息告诉您的内容。
结构的大小与它无关(而且结构的大小不能为 0,真的)。
您正在尝试使用非常量表达式初始化全局变量。例如你不能这样做:
#include <stdio.h>
int a = 0;
int b = a; //error: initializer element is not constant
int main(void) {
// your code goes here
return 0;
}
但你可以这样做:
#include <stdio.h>
int a = 0;
int main(void) {
int b = a; //OK
return 0;
}
或者这个:
#include <stdio.h>
#define A 0
int b = A; //OK
int main(void) {
return 0;
}