问题描述
这里是code片:
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;
}
的main.c
main.c
ip_t mask;
mask = get_mask(24);
那么错误:
错误:不兼容的类型分配从类型键入'ip_t'当'诠释'
面膜= get_mask(24);
mask = get_mask(24);
我想不通的地方是错误的,任何帮助将是pciated AP $ P $
I can't figure out where is wrong, any help will be appreciated
PS:GCC verison:GCC(Ubuntu的4.8.2-19ubuntu1)4.8.2
PS: gcc verison: gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
推荐答案
您的功能没有声明是在的main.c
可见。在的main.c
的功能是完全未知的编译器。你的编译器认为它返回 INT
。其余如下。
No declaration of your your function is visible in main.c
. In main.c
the function is completely unknown to the compiler. Your compiler assumed that it returns int
. The rest follows.
,编译器的这种行为是C89 / 90特异性的。它已被取缔的C99语言规范。现代的C编译器不应该让你叫未申报的功能。
Such behavior of the compiler is C89/90-specific. It has been outlawed in C99 language specification. Modern C compilers are not supposed to let you call undeclared functions.
原型你的 get_mask
函数添加到 ip.h
ip_t get_mask(int sub_len);
要告诉 get_mask
实际上返回编译器 ip_t
。
to tell the compiler that get_mask
actually returns ip_t
.
由于您使用的是 GCC
,我怀疑是编译器实际增发的诊断消息,告知您关于 get_mask
是未申报。你刚才忽略该消息?
Since your are using gcc
, I suspect that the compiler actually issued an additional diagnostic message informing you about get_mask
being undeclared. Did you just ignore that message?
这篇关于不兼容的类型时,函数返回一个工会的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!