C语言 我如何接受short作为函数的参数

vfwfrxfs  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(86)

我想传递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();

sigwle7e

sigwle7e1#

问题是你有两个不同的冲突声明:

  • 在第5行,将Random声明为short Random();
  • 在第362行,您将函数定义为short Random(short lowern, short uppern)

该定义与之前的C90(ANSI C)声明不兼容,因为参数类型不能从传递的值中推断出来:将short传递给没有原型的函数将使编译器使用默认提升并传递相应的int值。
自C99以来,调用没有原型的函数被指定为无效,因此任何带或不带参数的Random()调用都是不正确的,并且定义仍然与forward声明不兼容。
在C23中发生了另一个变化,声明short Random();现在意味着函数不应该接受任何参数,相当于声明short Random(void);,并且定义肯定与forward声明不兼容。
你应该使用相同的原型来声明和定义函数。但是请注意,使用类型short代替int作为函数参数和/或函数返回类型并没有真实的好处,在某些架构上,它实际上可能会产生更多的代码。

相关问题