如何在C中使用可选参数创建函数?

最近我在编写文件打开程序时遇到了一个问题.

让我清楚地解释一下我的问题.我在这里以公开电话为例.

要创建文件

open("file_name",O_CREAT,0766); //passing 3 parametrs

要打开文件

open("file_name",O_RDWR); //only 2 arguments.

然后我清楚地观察到了这一点,它也适用于main().

main(void) //worked
main(int argc,char **argv); //worked
main(int argc) //worked and it's doesn't give an error like "too few arguments". 
main() //worked

那么我们如何创建这些可选参数呢?编译器如何验证这些原型?如果可能,请编写示例程序.

解决方法

open函数声明为可变参数函数.它看起来像这样:
#include <stdarg.h>

int open(char const * filename,int flags,...)
{
    va_list ap;
    va_start(ap,flags);

    if (flags & O_CREAT)
    {
        int mode = va_arg(ap,int);
        // ...
    }

    // ...

    va_end(ap);
}

除非您已表明它们确实存在,否则不会消耗其他参数.

printf使用相同的结构.

手册并不总是明确这一点,因为唯一可能的两个签名是(char const *,int)和(char const *,int,int),所以揭示你的函数实际上接受变量参数是没有意义的. (你可以通过尝试编译像open(“”,1,2,3,4,5,6)这样的东西来测试它.)

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...