获取指针对已定义结构的初始化作为全局变量

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...

时出现问题
  1. 我已经如图所示定义了每个结构的大小(例如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;
}