C语言 我可以不带参数声明函数,然后用参数定义它吗?

e3bfsja2  于 2023-01-25  发布在  其他
关注(0)|答案(2)|浏览(167)

我可以声明一个没有参数的函数,然后用参数定义它吗?
我试着定义一个内部没有参数的函数,然后用参数声明它?我能用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])吗?

iqih9akk

iqih9akk1#

本声明:

void change_order();

声明函数change_order接受未知数量的参数并返回void。函数的定义与此匹配。
但是有一个额外的要求,因为调用者不知道参数的数量和类型,所以实际参数不能有一个会被提升的类型,这意味着charshort类型的参数(signedunsigned),它将被提升为intunsigned int,以及float类型的参数,它将被提升为double
change_order的定义未使用任何类型将被提升的参数,因此声明有效。
在声明中使用空参数列表被认为是过时的功能,因为它会阻止参数的编译类型检查,应该避免使用声明其参数类型的声明。

sczxawaw

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

相关问题