gpt4 book ai didi

c - 函数返回 union 时类型不兼容

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:14 24 4
gpt4 key购买 nike

这里是代码片段:

ip.h

typedef union _ip_t{
struct _dot_ip {
unsigned char f4;
unsigned char f3;
unsigned char f2;
unsigned char f1; //the first field
}dot_ip;
unsigned int int_ip;
}ip_t;

ip.c

ip_t
get_mask(int sub_len)
{
assert(sub_len > 0 || sub_len < 32);
ip_t ret;
ret.int_ip = ~((1 << (32 - sub_len)) - 1);
return ret;
}

主.c

ip_t mask;
mask = get_mask(24);

然后是错误:

error: incompatible types when assigning to type ‘ip_t’ from type ‘int’

mask = get_mask(24);

我不知道哪里错了,任何帮助将不胜感激

PS: gcc verison: gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2

最佳答案

main.c 中看不到您的函数声明。在 main.c 中,编译器完全不知道该函数。您的编译器假设它返回 int。其余的如下。

编译器的这种行为是特定于 C89/90 的。它在 C99 语言规范中已被取缔。现代 C 编译器不应该让您调用未声明的函数。

get_mask 函数的原型(prototype)添加到 ip.h

ip_t get_mask(int sub_len);

告诉编译器 get_mask 实际上返回 ip_t

由于您使用的是 gcc,我怀疑编译器实际上发出了一条额外的诊断消息,通知您未声明 get_mask。你刚刚忽略了这条消息吗?

关于c - 函数返回 union 时类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27915245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com