C默认参数

363

在 C 语言中,有没有一种方法可以指定函数的默认参数?


14
只想要一个稍微好一点的 C,不是 C++。认为 C+ 是从 C++ 中提取了各种小改进,但没有大混乱。而且,请不要使用不同的链接加载器。应该只是另一个类似预处理器的步骤。标准化。无处不在... - ivo Welch
在侧边栏中我没有看到的相关问题 - Shelby Moore III
我想说的是,别再像野蛮人一样了,好好学习使用C++(11,...)- 开个玩笑! /我熄灭了火焰...但是...你会爱上它的...哈哈哈,我忍不住了,抱歉。 - moodboom
23个回答

0

在纯C中,您不需要使用VARARGS。这里有一个例子。

int funcA_12(int a1, int a2) { ... }

#define funcA(a1) funcA_12(a1, 0)

这个答案与上面的两个函数方法非常相似,但是在这种情况下,您使用宏来定义参数的函数名称。


0

是的,你可以做类似的事情,这里你需要知道不同的参数列表,但你有相同的函数来处理它们。

typedef enum { my_input_set1 = 0, my_input_set2, my_input_set3} INPUT_SET;

typedef struct{
    INPUT_SET type;
    char* text;
} input_set1;

typedef struct{
    INPUT_SET type;
    char* text;
    int var;
} input_set2;

typedef struct{
    INPUT_SET type;
    int text;
} input_set3;

typedef union
{
    INPUT_SET type;
    input_set1 set1;
    input_set2 set2;
    input_set3 set3;
} MY_INPUT;

void my_func(MY_INPUT input)
{
    switch(input.type)
    {
        case my_input_set1:
        break;
        case my_input_set2:
        break;
        case my_input_set3:
        break;
        default:
        // unknown input
        break;
    }
}

-6

为什么我们不能这样做。

给可选参数一个默认值。这样,函数的调用者不一定需要传递参数的值。该参数采用默认值。 这个参数很容易变成客户端的可选项。

例如:

void foo(int a, int b = 0);

这里b是一个可选参数。


15
惊人的发现是,问题在于C语言不支持可选参数或重载函数,因此直接解决方案无法编译。 - Thomas

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