C语言 函数声明和调用

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 Python 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门


一.简介

回顾以下学习C 语言的第一个程序Hello World,代码如下:

#include<stdio.h> //printf函数的声明就在该头文件中
void main()
{
    //因为 stdio.h 包含了printf函数声明,所以可以直接调用printf函数
    printf("hello world");
}

stdio.h 头文件包含了 printf 函数的声明和定义,所以我们可以直接调用该函数;当然我们也可以跳转到 stdio.h 头文件中查看 printf 函数的声明和定义:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - 函数声明和调用
//@Time:2021/06/20 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 

    _CRT_STDIO_INLINE int __CRTDECL printf(
        _In_z_ _Printf_format_string_ char const* const _Format,
        ...)
    #if defined _NO_CRT_STDIO_INLINE
    ;
    #else
    {
        int _Result;
        va_list _ArgList;
        __crt_va_start(_ArgList, _Format);
        _Result = _vfprintf_l(stdout, _Format, NULL, _ArgList);
        __crt_va_end(_ArgList);
        return _Result;
    }
    #endif

printf 函数的实现原理,你可以不用管,你只需要明白如何传递参数即可,这就是函数调用的过程;


二.函数声明和定义

函数声明只是一个空壳,不会有具体的函数实现,而定义要实现函数的实现,例如:


1.函数声明:不需要实现这个函数的功能

int sub(int x,int y); //只需要声明即可,不需要实现这个函数的功能

2.函数定义:必须实现这个函数的功能

int sub(int x,int y) ////需要实现这个函数的功能
{
    return (x-y);
}

三.函数调用

函数在调用之前必须声明或者定义,否则会报错:找不到标识符,这也是为什么hello world中调用 printf 函数必须要包含 stdio.h 头文件的原因;

我们观察如下代码:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - 函数声明和调用
//@Time:2021/06/20 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 

#include<stdio.h>
void main()
{
    int ret = sub(2, 1); //函数调用
    printf("ret:%d ", ret);
    return ;
}
int sub(int x, int y) //函数定义
{
    return (x - y);
}

编译的时候报错:

错误 C3861 “sub”: 找不到标识符  

首先我们分析:程序首先进入 main 函数,然后调用 sub 函数,此时在调用之前都找不到 sub 的声明,当然不知道 sub 是个什么玩意!!


解决办法一:将函数定义在 main 前面,示例代码如下:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - 函数声明和调用
//@Time:2021/06/20 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 

#include<stdio.h>
int sub(int x, int y)//函数定义
{
    return (x - y);
}
void main()
{
    int ret = sub(2, 1);//函数调用
    printf("ret:%d ", ret);
    return ;
}

解决办法二:讲函数声明在 main 函数前面,只要有了函数声明,函数不论是定义在 main 函数前面或者后面都无所谓,示例代码如下:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - 函数声明和调用
//@Time:2021/06/20 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 

#include<stdio.h>
//函数声明
int sub(int x, int y);
void main()
{
    int ret = sub(2, 1); //函数调用
    printf("ret:%d ", ret);
    return ;
}
//函数定义
int sub(int x, int y)
{
    return (x - y);
}

四.函数形参和实参

形参是函数定义的时候用的,实参是调用函数的时候用的举个例子:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - 函数声明和调用
//@Time:2021/06/20 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 

void fun(int a); /* 这里的a就是形参 */
int main()
{
    int b = 1;
    fun(b); /* b就是实参 */
}

五.猜你喜欢

  1. C语言逻辑运算符
  2. C语言三目运算符
  3. C语言逗号表达式
  4. C语言 sizeof 和 strlen 函数区别
  5. C语言 strcpy 和 strcpy_s 函数区别
  6. C语言 memcpy 和 memcpy_s 区别
  7. C语言 数组定义和使用
  8. C语言 数组遍历
  9. C语言 数组下标越界
  10. C语言 数组内存溢出
  11. C语言 数组下标越界和内存溢出区别
  12. C语言 二维数组定义和使用
  13. C语言 二维数组行数和列数计算
  14. C语言 指针声明和定义
  15. C语言 指针 p++ / p–
  16. C语言 p++/(p)++/(p++)/p++
  17. C语言 使用指针遍历数组
  18. C语言 指针和数组区别
  19. C语言 数组指针
  20. C语言 指针数组
  21. C语言 指针数组和数组指针区别
  22. C语言 空指针 NULL
  23. C语言 void 指针
  24. C语言 野指针
  25. C语言 函数声明和定义
  26. C语言 函数声明和调用

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞2 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容