C语言中的默认参数

53

在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 中不合法,那么有什么替代方案吗?请告诉我。谢谢。


2
确实,在 C 语言中这是不合法的。C 语言也没有函数重载的特性。 - Mysticial
1
可能是重复问题:https://dev59.com/lnM_5IYBdhLWcg3wNwUv - Timothy Jones
https://dev59.com/E3A75IYBdhLWcg3w_uqD - user900360
5个回答

85

默认参数是C ++的一个特性。

C语言没有默认参数。


22

在标准C中不可能实现。一个替代方案是将参数编码到函数名称中,例如:

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

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

1
+1。我也喜欢在此回答的注释中练习,其中函数名称包括它所需要的参数数量。 - Timothy Jones

10

C语言中没有默认参数。

一种方法是传递NULL指针,然后如果传递了NULL,则将值设置为默认值。但是这样做很危险,除非你真的需要默认参数,否则我不建议使用。

示例:

function ( char *path)
{
    FILE *outHandle;

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

}

2
如果你使用的编译器兼容 C++2a,那么你可以使用一个预处理器技巧,如在https://dev59.com/E3A75IYBdhLWcg3w_uqD#10841376中所述。
你可以将这个代码片段作为示例:
#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));
}

1

不是那样的...

你可以使用一个整数数组或可变参数,并在函数内部填充缺失的数据。但你会失去编译时检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接