精华内容
下载资源
问答
  • C++ 函数原型

    千次阅读 2017-04-01 09:58:40
    一,函数原型语法 函数原型是一条语句,因此必须使用分号结束。获得原型最简单的方法是复制函数定义中的函数头。函数原型不要求提供变量名,有类型列表就可以了。 二,为什么需要函数原型函数原型描述了函数到...

    一,函数原型

    函数原型(函数声明)就是告诉编译器这个函数是存在的,让编译器知道这个函数的相关信息。函数原型不要求提供形参名,有类型列表就可以了。避免使用函数原型的方法是,在首次使用函数定义之前定义它,但这并不是总可行的。我们一般把函数声明放在主函数的前面,因为min()函数是应用程序的入口。函数声明是告诉编译器这个函数存在,函数定义是表示该函数如何去做。


    二,为什么需要函数原型?

    函数原型描述了函数到编译器的接口,它将函数返回值的类型以及参数的类型和数量告诉编译器。例如:看函数原型如何影响下面的函数调用。

    double cube(double x);
    
    int main()
    {
        double val = cube(5.0);
        return 0;
    }
    
    double cube(double x){
        return x * x;
    }

    首先原型告诉编译器,cube()有一个double参数。如果程序没有提供这样的参数,原型将让编译器捕获这样的错误。其次,函数调用结束后,将把返回值放到指定的位置。然后调用函数将从这个位置获取返回值。由于函数原型指出了函数的返回值是double类型,因此编译器知道应检索多少个字节以及如何解释他们。如果没有这些信息,编译器只能进行猜测,但是编译器并不会这么做。


    三,函数原型的功能

    函数原型可以帮助编译器完成许多的工作,同时,它也可以帮助程序极大的降低程序出错的几率。原型可以确保以下几点:

    1,编译器正确处理函数返回值。

    2,编译器检索使用的参数数目是否正确。

    3,编译器检查使用的参数类型是否正确,如果不正确转换为正确的类型。

    int x = 5;
    double val = cube(x);

    首先看上面的函数调用,程序将一个int型的值5传递给cube()。编译器注意到,cube()原型指定一个double类型的参数,因此会将5转换为5.0。

    展开全文
  • C语言函数原型

    2013-09-11 17:18:00
    在主调函数中调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前要先进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对...

    在主调函数中调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前要先进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值作相应的处理。

    其一般形式为:

            类型说明符 被调函数名(类型 形参,类型 形参…);  

    或为:

            类型说明符 被调函数名(类型,类型…);  

    括号内给出了形参的类型和形参名,或只给出形参类型。这便于编译系统进行检错,以防止可能出现的错误。

    例8.1 main函数中对max函数的说明为:

    int max(int a,int b);

    或写为:

            int max(int,int);

    C语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。

    1) 如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。例8.2的主函数中未对函数s作说明而直接调用即属此种情形。

    2) 当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。例如例8.1中,函数max的定义放在main 函数之前,因此可在main函数中省去对max函数的函数说明int max(int a,int b)。

    3) 如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。例如:

        char str(int a);

        float f(float b);

        main()

        {

         ……

        }

        char str(int a)

        {

         ……

        }

        float f(float b)

        {

         ……

        }

    其中第一,二行对str函数和f函数预先作了说明。因此在以后各函数中无须对str和f函数再作说明就可直接调用。

    4) 对库函数的调用不需要再作说明,但必须把该函数的头文件用include命令包含在源文件前部。

    参考:http://www.winyes.com/Develop/Program/CYY/CyyCourse/8_6.html

    对函数的“定义”和“声明”不是一回事。“定义”是指对函数功能的确立,包括指定函数名,函数值类型、形参类型、函数体等,它是一个完整的、独立的函数单 位。而“声明” 的作用则是把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查(例如函数名是否正确,实参与形参的类 型和个数是否一致)。从程序中可以看到对函数的声明与函数定义中的函数首部基本上是相同的。因此可以简单地照写已定义的函数的首部,再加一个分号,就成为 了对函数的“声明”。在函数声明中也可以不写形参名,而只写形参的类型。 在C语言中,函数声明称为函数原型(function prototype)。使用函数原型是ANSI C的一个重要特点。它的作用主要是利用它在程序的编译阶段对调用函数的合法性进行全面检查。

    说明:

    <1> 以前的C版本的函数声明方式不是采用函数原型,而只是声明函数名和函数类型。
    如:float add(); 不包括参数类型和参数个数。系统不检查参数类型和参数个数。新版本也兼容这种用法,但不提倡这种用法,因为它未进行全面的检查。

    <2> 实际上,如果在函数调用前,没有对函数作声明,则编译系统会把第一次遇到的该函数形式(函数定义或函数调用)作为函数的声明,并将函数类型默认为int 型。如一个max函数,调用之前没有进行函数声明,编译时首先遇到的函数形式是函数调用"max(a, b)",由于对原型的处理是不考虑参数名的,因此系统将max()加上int作为函数声明,即int max(); 因此不少教材说,如果函数类型为整型,可以在函数调用前不必作函数声明。但是使用这种方法时,系统无法对参数的类型做检查。或调用函数时参数使用不当,在 编译时也不会报错。因此,为了程序清晰和安全,建议都加以声明为好。

    <3> 如果被调用函数的定义出现在主调函数之前,可以不必加以声明。因为编译系统已经先知道了已定义的函数类型,会根据函数首部提供的信息对函数的调用作正确性检查。

    <4> 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调用函数中不必对所调用的函数再作声明。

    参考:http://sdzhguoliang.blog.163.com/blog/static/9982057201062652022596/

    http://www.cnblogs.com/pmer/archive/2011/09/04/2166579.html

    转载于:https://www.cnblogs.com/cc-Cheng/p/3314992.html

    展开全文
  • 函数调用的一般形式 函数调用的一般形式为: ...按函数在语句中的作用来分,可以有以下3种函数调用方式: 函数语句 把函数调用单独作为一个语句,并不要求函数带回一个值,只是要求函数完成一定..

    函数调用的一般形式

    函数调用的一般形式为:
        函数名([实参表列]);
    如果是调用无参函数,则“实参表列”可以没有,但括号不能省略。如果实参表列包含多个实参,则各参数间用逗号隔开。实参与形参的个数应相等,类型应匹配(相同或赋值兼容)。实参与形参按顺序对应,一对一地传递数据。但应说明,如果实参表列包括多个实参,对实参求值的顺序并不是确定的。

    函数调用的方式

    按函数在语句中的作用来分,可以有以下3种函数调用方式:

    1. 函数语句
      把函数调用单独作为一个语句,并不要求函数带回一个值,只是要求函数完成一定的操作。如例4.1中的printstar( );
    2. 函数表达式
      函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。如c=2*max(a, b);
    3. 函数参数
      函数调用作为一个函数的实参。如:
      m=max(a, max(b, c));  //max(b, c)是函数调用,其值作为外层max函数调用的一个实参

     

    对被调用函数的声明和函数原型

    在一个函数中调用另一个函数(即被调用函数)需要具备以下条件:

    1. 首先被调用的函数必须是已经存在的函数。
    2. 如果使用库函数,一般还应该在本文件开头用#include命令将有关头文件“包含”到本文件中来。
    3. 如果使用用户自己定义的函数,而该函数与调用它的函数(即主调函数)在同一个程序单位中,且位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声明。


    所谓函数声明(declare),就是在函数尚在未定义的情况下,事先将该函数的有关信息通知编译系统,以便使编译能正常进行。

    【例4.3】对被调用的函数作声明。

     
    1. #include <iostream>
    2. using namespace std;
    3. int main( )
    4. {
    5. float add(float x,float y); //对add函数作声明
    6. float a,b,c;
    7. cout<<"please enter a,b:";
    8. cin>>a>>b;
    9. c=add(a,b);
    10. cout<<"sum="<<c<<endl;
    11. return 0;
    12. }
    13.  
    14. float add(float x,float y)//定义add函数
    15. {
    16. float z;
    17. z=x+y;
    18. return (z);
    19. }


    运行情况如下:
    please enter a, b: 123.68  456.45↙
    sum=580.13

    注意:对函数的定义和声明不是同一件事情。定义是指对函数功能的确立,包括指定函数名、函数类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。而声明的作用则是把函数的名字、函数类型以及形参的个数、类型和顺序(注意,不包括函数体)通知编译系统,以便在对包含函数调用的语句进行编译时,据此对其进行对照检查(例如函数名是否正确,实参与形参的类型和个数是否一致)。

    其实,在函数声明中也可以不写形参名,而只写形参的类型,如
        float add(float, float);

    这种函数声明称为函数原型(function prototype)。使用函数原型是C和C++的一个重要特点。它的作用主要是: 根据函数原型在程序编译阶段对调用函数的合法性进行全面检查。如果发现与函数原型不匹配的函数调用就报告编译出错。它属于语法错误。用户根据屏幕显示的出错信息很容易发现和纠正错误。

    函数原型的一般形式为:
        函数类型 函数名(参数类型1, 参数类型2…);

        函数类型 函数名(参数类型1  参数名1, 参数类型2  参数名2…);

    第(1)种形式是基本的形式。为了便于阅读程序,也允许在函数原型中加上参数名,就成了第(2)种形式。但编译系统并不检查参数名。因此参数名是什么都无所谓。上面程序中的声明也可以写成
        float add(float a, float b);  //参数名不用x、y,而用a、b
    效果完全相同。

    应当保证函数原型与函数首部写法上的一致,即函数类型、函数名、参数个数、参数类型和参数顺序必须相同。在函数调用时函数名、实参类型和实参个数应与函数原型一致。

    两点说明:
    1) 前面已说明,如果被调用函数的定义出现在主调函数之前,可以不必加以声明。因为编译系统已经事先知道了已定义的函数类型,会根据函数首部提供的信息对函数的调用作正确性检查。

    有经验的程序编制人员一般都把main函数写在最前面,这样对整个程序的结构和作用一目了然,统览全局,然后再具体了解各函数的细节。此外,用函数原型来声明函数,还能减少编写程序时可能出现的错误。由于函数声明的位置与函数调用语句的位置比较近,因此在写程序时便于就近参照函数原型来书写函数调用,不易出错。所以应养成对所有用到的函数作声明的习惯。这是保证程序正确性和可读性的重要环节。

    2) 函数声明的位置可以在调用函数所在的函数中,也可以在函数之外。如果函数声明放在函数的外部,在所有函数定义之前,则在各个主调函数中不必对所调用的函数再作声明。例如:
    char letter(char, char); //本行和以下两行函数声明在所有函数之前且在函数外部
    float f(float, float);  //因而作用域是整个文件
    int i(float,  float);
    int main( )
    {…}//在main函数中不必对它所调用的函数作声明
    char letter(char c1, char c2)  //定义letter函数
    {…}
    float f(float x, float y)//定义f函数
    {…}
    int i(float j, float k) //定义i函数
    {…}
    如果一个函数被多个函数所调用,用这种方法比较好,不必在每个主调函数中重复声明。

    展开全文
  • 构造函数原型,继承、原型链、conlose对象及异常处理 1构造函数 每一个构造函数都有一个construction(构造器); 调用对象的construction偶可以获取到对象的构造函数,这个属性是原型对象提供的 2、函数有一个name...

    在这里插入图片描述
    构造函数原型,继承、原型链、conlose对象及异常处理

    1构造函数

    每一个构造函数都有一个construction(构造器);

    调用对象的construction偶可以获取到对象的构造函数,这个属性是原型对象提供的

    2、函数有一个name属性,通过该属性可以获取函数的名称,需要注意的是IE8及以下的版本不支持该属性

    3、组合继承通过for循环来实现 使用in关键字

    语法:for(var k in 被继承对象名称){

    对象名称[k]=被继承对象[k]
    
    }
    

    4、原型继承: 语法:继承对象.prototype=new 被继承对象

    任何一个对象都有一个原型对象,原型对象也有原型对象,对象的原型一直往上走,直到找到null为止;

    Object.prototype处于顶层

    5、原型链每个构造函数都有原型对象每个对象都有构造函数

    每个构造函数的原型都是一个对象那么这个原型对象也会有构造函数

    那么这个原型对象的构造函数也有原型对象这样就会形成一个链式结构,称之为 原型链

    6、函数表达式:

    var ff=function(){}
    

    qubie:函数声明如果放在if-else的语句中,在IE8的浏览器中会出现问题,执行的是后面的else

    7、this指向

    (1)普通函数的this是window
    	Eg: function(){console.log(this);}	
    (2)定时器中的this是window
    	setInterval(function(){console.log(this);},1000);
    (3)构造函数中的this 是实例对象
    	function Person(){console.log(this);} var per=new Person();  console.log(per);
    (4)对象的方法中的 this  也是实例对象
    	function Person(){
    		console.log(this);
    		this.sayHi=function(){
    			console.log(this);
    		}
    	} 
    	var per=new Person();  
    	console.log(per);
    (5)原型对象中的this  也是 实例对象
     	Person.prototype.eat=function(){
     		console.log(this);
     	}
     	per.eat();
    

    函数是对象,对象不一定是函数

    // 对象中有proto原型,是对象

    // 函数中有prototype原型,是对象

    8、数组中函数的调用

    重点:  要知道 输出函数类型的时候 是function, 所以function是一种数据类型
    
    var arr=[
    
    	function (){},
    	function (){},
    	function (){}
    ];
    arr.foreach(function(ele){
    	ele();
    })
    

    9、递归

    什么是递归?

    是指函数中调用函数自己 , 就是递归, 递归一定要具备结束的条件;

    10.异常处理

    在js中使用try catch finally语句来处理异常

    try:捕获异常,将可能出现异常的代码放到try中

    catch():捕获并处理异常可以获取到异常的详细信息,括号要穿参数,浏览器已经捕获到参数 ,我们只需要接收

    		一般用e或exception接收
    

    finally:将无论如何都要执行的代码放在finally中,处理异常是为了让程序正常执行

    try{可能出现异常的程序}catch(接收){}finally{}

    try要配合catch或者是finally一起使用

    11、异常处理

    我们可以使用throw抛出异常,自定义错误,事实上,我们可以抛出任何对象

    Error表示异常错误,它有两个基本属性;

    message表示异常的详细信息

    name指Error对象的构造函数

    自定义异常:throw new Error(自定义错误)

    <script type="text/javascript">
        //自定义异常
        if(true){
        throw new Error('就想出个错');//返回Uncaught Error: 就想出个错
        }		
    </script>
    

    12、Console 对象方法

    console.log() 用于在 console 窗口显示普通信息。

    console.warn() 用于在 console 窗口显示警示信息。

    console.error() 用于在 console 窗口显示错误信息。

    console.info() 用于在 console 窗口显示提示类信息。

    console.table 方法可以将复合类型的数据转成表格。复合类型的数据转成表格,必须拥有主键。

    console.dir() 对一个对象进行检查。

    console.assert() 验证某个条件是否为真。

    console.time(),console.timeEnd() 用于计算一个操作花的时间。

    console.clear() 对 console 窗口进行清屏。

    console.debug用于输出调试信息

    展开全文
  • 4.4、函数的调用以及函数原型

    千次阅读 2015-03-06 10:59:23
    函数调用的一般形式 函数调用的一般形式为:  函数名([实参表列]); 如果是调用无参函数,则“实参表列”可以没有,但括号不能省略。如果实参表列包含多个实参,则各参数间用逗号隔开。实参与形参的个数应相等,...
  • 这时一个ANSI C 编译器会假设您没有用函数原型声明函数,它就不会进行参数检查。 因此,为了表示一个函数确实不使用参数,需要在圆括号内加入void关键字: void printf_name(void); ANSI C 会把上句解释为...
  • C语言标准库函数 原型声明:extern char *strcpy(char *dest,char *src); 头文件:string.h 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。 说明:src和dest所指内存区域不可以重叠且dest必须有...
  • 以下是摘录的比较好的一篇说明:点击打开链接1 什么是C语言的隐式函数声明在C语言中,函数在调用前不一定非要声明。如果没有声明,那么编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。下面是...
  • #include long long int f(int n) { int i; long long int m=1; for(i=1;i;i++) m=m*i; return m; } int main(int argc, char *argv[]) { int a; scanf("%d",&a);...求大佬帮助寻找错误
  • 声明函数函数指针

    千次阅读 2016-06-30 21:59:21
    概述  在很多情况下,尤其是读别人所写代码的时候,对 ... 问题:声明函数  有一段程序存储在起始地址为 0的一段内存上,如果我们想要调用这段程序,请问该如何去做?  答案  答案是 (*(void (*)(
  • 第一,pow函数原型 一般来讲,使用一个函数的时候了解他的原型会减少很多不必要的麻烦 原型:extern float pow(float x, float y); 用法:#include <math.h> 功能:计算x的y次幂。 说明:x应大于零,返回幂...
  • Erlang类型及函数声明规格

    千次阅读 2013-12-10 21:38:52
    Erlang类型及函数声明规格 Author: Mail: Date: Copyright: litaocheng litaocheng@gmail.com 2009.6.8 This document has been placed in the public domain. Contents 概述...
  • API函数声明

    千次阅读 2004-12-15 18:40:00
    在VB中,如何声明函数呢?我想,如果你正在看此文,那么你绝对能够回答得出这个问题。以下便是你应该很熟悉的函数声明∶Function SetFocus (ByVal hwnd As Long) As Long即,这行代码定义了名为SetFocus的函数...
  • 函数声明函数指针、指针函数

    千次阅读 2007-12-21 15:12:00
    问题:声明函数  有一段程序存储在起始地址为 0的一段内存上,如果我们想要调用这段程序,请问该如何去做?  答案  ...
  • 变量和函数的定义和声明

    千次阅读 2013-04-03 14:22:03
    2. 定义和声明  2.1. extern和static关键字  在上一节我们把两个程序文件放在一起编译链接,main.c用到的函数push、pop和is_empty由stack.c提供,其实有一点小问题,我们用-Wall选项编译main.c可以...
  • 函数模板的声明和模板函数的生成 1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。 ...
  • 简单来说,就是编译无法分辨你当前的代码是在声明一个函数原型,还是在调用一个函数。 我上面的代码,本来的意图是调用一个无参的构造函数,然后编译器认为我是在声明一个函数,这个函数的返回类型是MyArray,所以...
  • 关于c语言中的复杂原型声明

    千次阅读 2011-07-18 23:04:48
    c语言中的复杂原型声明是很多人都头痛的事,下面我说一下自己的理解。主要是从理解的角度说明声明的内容。 1.首先是从左往右找到未声明的标识符,2.再找将未声明标识符括起来的最里层的小括号的一大块,再根据...
  • 函数声明和定义一般都有参数,...以下三种方式声明和定义函数都是正确的。 第一种:常用的,声明和定义函数参数名称均一致。 int add(int a, int b);   // 函数声明 int add(int a, int b)    /
  • 1 什么是C语言的隐式函数声明 在C语言中,函数在调用前不一定非要声明。如果没有声明,那么编译器会自己主动依照一种隐式声明的规则,为调用函数的C代码产生汇编代码。以下是一个样例: int main(int argc, char**...
  • typedef C 中复杂的函数声明

    千次阅读 2012-04-26 17:45:59
    概述  在很多情况下,尤其是读别人所写代码的时候,... 问题:声明函数  有一段程序存储在起始地址为0的一段内存上,如果我们想要调用这段程序,请问该如何去做?  答案  答案是(*(void (*)( ) )0
  • C++——友元函数&内联函数

    千次阅读 多人点赞 2018-12-07 23:55:15
    友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。...如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如...
  • Go 函数 学习笔记

    2017-08-12 09:44:47
    但支持以下特性:无需声明原型、不定长度变参、多返回值、命名返回值参数 匿名函数、闭包定义函数使用关键字 func,且左大括号不能另起一行 函数也可以作为一种类型使用 defer defer的执行方式类似其它语言中的析构...
  • 函数(C++版)

    千次阅读 多人点赞 2020-05-10 15:00:04
    函数(C++版)目录一、C++的程序组件二、数学库函数三、...1、函数原型也称为函数声明 2、函数原型告诉编译器函数的名称、函数返回值类型、函数预期接受的参数个数以及参数的类型和顺序。 例如: #include<iostre...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,671
精华内容 18,268
关键字:

以下声明函数原型错误的是