我想传递0-200之间的小整数,因此我更喜欢short
,但是如果参数被引用为short
,代码就不工作了,程序可以正确地为int
工作,short
也可以作为函数返回类型。
short Random(short lowern, short uppern) {
// blah blah
return 23;
}
字符串
我得到这个错误:
// Error :
c_temp.c:362:7: error: conflicting types for 'Random'
short Random(short int lowern, short int uppern) {
^~~~~~
c_temp.c:362:1: note: an argument type that has a default promotion can't match an empty parameter name list declaration
short Random(short int lowern, short int uppern) {
^~~~~
c_temp.c:5:7: note: previous declaration of 'Random' was here
short Random();
型
1条答案
按热度按时间sigwle7e1#
问题是你有两个不同的冲突声明:
Random
声明为short Random();
short Random(short lowern, short uppern)
。该定义与之前的C90(ANSI C)声明不兼容,因为参数类型不能从传递的值中推断出来:将
short
传递给没有原型的函数将使编译器使用默认提升并传递相应的int
值。自C99以来,调用没有原型的函数被指定为无效,因此任何带或不带参数的
Random()
调用都是不正确的,并且定义仍然与forward声明不兼容。在C23中发生了另一个变化,声明
short Random();
现在意味着函数不应该接受任何参数,相当于声明short Random(void);
,并且定义肯定与forward声明不兼容。你应该使用相同的原型来声明和定义函数。但是请注意,使用类型
short
代替int
作为函数参数和/或函数返回类型并没有真实的好处,在某些架构上,它实际上可能会产生更多的代码。