本文引自:http://c.biancheng.net/cpp/html/1592.html

一个函数的参数的数目没有明确的限制,但是参数过多(例如超过8个)显然是一种不可取的编程风格。参数的数目直接影响调用函数的速度,参数越多,调用函数就越慢。另一方面,参数的数目少,程序就显得精练、简洁,这有助于检查和发现程序中的错误。因此,通常应该尽可能减少参数的数目,如果一个函数的参数超过4个,你就应该考虑一下函数是否编写得当。

如果一个函数不得不使用很多参数,你可以定义一个结构来容纳这些参数,这是一种非常好的解决方法。在下例中,函数print_report()需要使用10个参数,然而在它的说明中并没有列出这些参数,而是通过一个RPT_PARMS结构得到这些参数。

# include <atdio. h>
typedef struct
(
    int      orientation ;
    char     rpt_name[25];
    char     rpt_path[40];
    int      destination;
    char     output_file[25];
    int      starting_page;
    int      ending_page;
    char     db_name[25];
    char     db_path[40];
    int      draft_quality;
)RPT_PARMS;
void main (void);
int print_report (RPT_PARMS* );
void main (void)
{
    RPT_PARMS    rpt_parm; /*define the report parameter
                              structure variable * /
     /* set up the report parameter structure variable to pass to the
     print_report 0 function */
    rpt_parm. orientation = ORIENT_LANDSCAPE;
    rpt_parm.rpt_name = "QSALES.RPT";
    rpt_parm. rpt_path = "Ci\REPORTS"
    rpt_parm. destination == DEST_FILE;
    rpt_parm. output_file = "QSALES. TXT" ;
    rpt_parm. starting_page = 1;
    rpt_pann. ending_page = RPT_END;
    rpt_pann.db_name = "SALES. DB";
   rpt_parm.db_path = "Ci\DATA";
   rpt_pann. draft_quality = TRUE;
    /*call the print_report 0 function; paaaing it a pointer to the
       parameteM inatead of paMing it a long liat of 10 aeparate
       parameteM.  * /
    ret_code = print_report(cu*pt_parm);
}
int print_report(RPT_PARMS*p)
{
    int rc;
    /*acccM  the report parametcra paaaed to the print_report()
       function */
    oricnt_printcr(p->orientation);
    Kt_printer_quality((p->draft_quality == TRUE) ? DRAFT ; NORMAL);
     return rc;
}

上例唯一的不足是编译程序无法检查引用print_report()函数时RPT_PARMS结构的10个成员是否符合要求。

关于C函数的参数个数的问题的更多相关文章

  1. c语言重载(overriding in C)或函数不定参数个数

    google一下 c overiding发现有这样一段英文解释: Because C doesn't require that you pass all parameters to the funct ...

  2. js函数定义参数个数和实际传入参数的对比

    因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java和C#一样对其传入参数的类型进行定义.那么传入参数的个数有没有影响呢?今天小猪就做了个实 ...

  3. c++11之获取模板函数的参数个数和函数返回值类型

    本文演示c++需要支持c++11及以上标准 获取参数个数 1.模板函数声明 template <class R, class... Args> R getRetValue(R(*)(Arg ...

  4. JS函数的参数对象arguments在严格模式下的限制

    在JS中,传入的函数的参数个数可以与定义函数的个数不一致,那么对于传入的实参的引用,则是arguments对象.然而改对象在严格模式和非严格模式下是由区分的: 1 在严格模式下arguments作为了 ...

  5. C语言中函数可变参数解析

    大多数时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数.但在某些情况下希望函数的参数个数可以根据需要确定.典型的例子有 大家熟悉的函数printf().scanf ...

  6. python 减少可调用对象的参数个数

    有一个被其他python 代码使用的callable 对象,可能是一个回调函数或者是一个处理器,但是它的参数太多了,导致调用时出错 如果需要减少某个函数的参数个数, 你可以使用functools.pa ...

  7. C#学习笔记(十):函数和参数

    函数 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste ...

  8. (转)C++ main函数中参数argc和argv含义及用法

    原博地址:https://blog.csdn.net/dcrmg/article/details/51987413 argc 是 argument count的缩写,表示传入main函数的参数个数: ...

  9. C++ main函数中参数argc和argv含义及用法

    argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...

随机推荐

  1. The use of function Merge (update、insert、delete)

    1.The use of function merge(update.insert.delete) Example: #1.Initialize the data create table #test ...

  2. c#解析XML和JSON

    http://guwei4037.blog.51cto.com/3052247/1344190  

  3. Activiti工作流学习-----基于5.19.0版本(8)

    8.1.5 Start Event 继续上一篇的事件的分享笔记,Start Event指明该处是流程开始,至于开始事件的类型(消息到达开始,指定的事件循环开始等),定义如何开始是在开始事件圆圈图标里面 ...

  4. 有时summary的状态和details是否有open属性有关

    用过mac的同学对这个界面一定很熟悉,因为这个界面和我们今天要说的details有很多相近的地方,首先,其有折叠效果,用户可以自己选择打开或关闭哪一个,其次,当我们直接打开的时候,默认会有几个标签是打 ...

  5. Effective Java实作Comparator - 就是爱Java

    如果集合或数组内的对象,有1个以上不同的排序逻辑时,那该如何处理呢?尤其是当已经实现了Comparable,又不能变动原本的逻辑时,Mix会采用Comparator来处理. 阅读全文>>

  6. Borland license information was found,but it is not valid for delphi.

    The start Delphi7 come amiss: Borland license information was found,but it is not valid for delphi. ...

  7. 转:什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?

    什么是CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用 ...

  8. Mysql unix_timestamp() FROM_UNIXTIME和DATE_FORMAT(date,format)

    mysql 中:UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) 若无参数调用,则返回一个 Unix timestamp ('1970-01-01 00:00:00' GM ...

  9. AzCopy – 跨帐户复制 Blob

    您可以随时从 aka.ms/AzCopy 下载最新版本. 去年4月发布的版本中的新增功能 支持跨帐户复制 Blob:AzCopy 允许您在相同存储帐户内或不同存储帐户之间复制 Blob(有关跨帐户 B ...

  10. fdm_search_info_w_book_chain

    数据知识管理平台-元数据管理-fdm_search_info_w_book_chain-详细信息 fdm_search_info_w_book_chain