我可以声明一个没有参数的函数,然后用参数定义它吗?
我试着定义一个内部没有参数的函数,然后用参数声明它?我能用C做吗?
#include<stdio.h>
void change_order(); //Here Here
int main()
{
int num[3];
for(int i = 0; i<3; i++)
{
printf("Enter Number%i:", i+1);
scanf("%i", &num[i]);
}
change_order(num, 0, 1);
for(int i = 0; i<3; i++)
{
printf("%i\n", num[i]);
}
}
void change_order(int array[], int index1, int index2 )
{
if(array[index1]>array[index2])
{
int Temp = array[index1];
array[index1] = array[index2];
array[index2] = Temp;
}
}
还有一个问题:我可以写void change_order(int array[int n])
吗?
2条答案
按热度按时间iqih9akk1#
本声明:
声明函数
change_order
接受未知数量的参数并返回void
。函数的定义与此匹配。但是有一个额外的要求,因为调用者不知道参数的数量和类型,所以实际参数不能有一个会被提升的类型,这意味着
char
和short
类型的参数(signed
或unsigned
),它将被提升为int
或unsigned int
,以及float
类型的参数,它将被提升为double
。change_order
的定义未使用任何类型将被提升的参数,因此声明有效。在声明中使用空参数列表被认为是过时的功能,因为它会阻止参数的编译类型检查,应该避免使用声明其参数类型的声明。
sczxawaw2#
直到并包括C17(C18),你可以逃脱这一点。
从C23开始,当它被释放时,这将是不允许的。
在旧版本的标准中,
void change_order();
的声明声明函数存在并返回void
(无),但是除了它不是可变参数函数(类似于printf()
--它的原型不以, ...
结尾)之外,它没有提供函数的原型,只提供了一个声明。在C23中,这个声明和
void change_order(void);
一样--一个不带参数也不返回值的函数,带参数的定义会与声明冲突并被拒绝,带参数的调用也会被拒绝。不要使用废弃符号-它的使用寿命最多以月为单位。
您还询问是否可以编写
void change_order(int array[int n])
。答案是否定的。如果
n
定义得当,也许可以写成void change_order(int array[n]);
。但是,用可变长度数组写函数的一般方法是void change_order(int n, int array[n])
,或者首选size_t n
。