C语言中的默认参数

rdlzhqv9  于 2022-12-02  发布在  其他
关注(0)|答案(5)|浏览(173)

是否可以在C中设置默认参数的值?例如:

void display(int a, int b=10){
//do something
}

main(){
  display(1);
  display(1,2); // override default value
}

Visual Studio 2008,投诉-void display(int a,int B=10)中有语法错误。如果这在C中是不法律的的,有什么替代方法?请让我知道。谢谢。

dgtucam1

dgtucam11#

默认参数是C++的一项功能。
C没有默认参数。

sulc1iza

sulc1iza2#

这在标准C中是不可能的。一种替代方法是将参数编码到函数名中,例如:

void display(int a){
    display_with_b(a, 10);
}

void display_with_b(int a, int b){
    //do something
}
kd3sttzy

kd3sttzy3#

C中没有默认参数。
一种方法是传入NULL指针,如果传递了NULL,则将指针值设置为默认值。但这很危险,所以我不推荐这样做,除非你真的需要默认参数。
范例

function ( char *path)
{
    FILE *outHandle;

    if (path==NULL){
        outHandle=fopen("DummyFile","w");
    }else
    {
        outHandle=fopen(path,"w");
    }

}
rnmwe5a2

rnmwe5a24#

不是那边...
你可以使用一个int数组或者一个varargs来填充函数中缺少的数据,但是会丢失编译时检查。

gz5pxeao

gz5pxeao5#

如果您使用的是与C++2a兼容的编译器,则可以使用一个预处理器技巧,如https://stackoverflow.com/a/10841376/18166707中所述
您可以使用以下代码片段作为示例:

#include <stdio.h>

#define ADD_THREE(a,b,...) add_three_nums(a, b, (0, ##__VA_ARGS__))

int add_three_nums( int a, int b, int c)
{
  return a + b + c;
}

void main( void )
{
  printf("%d\n", ADD_THREE(3, 5));
  printf("%d\n", ADD_THREE(4, 6, 8));
}

相关问题