目录

  • 一.简介
  • 二.函数声明和定义
    • 1.函数声明:不需要实现这个函数的功能
    • 2.函数定义:必须实现这个函数的功能
  • 三.函数调用
  • 四.函数形参和实参
  • 五.猜你喜欢

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

一.简介

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

#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++
  17. C语言 使用指针遍历数组
  18. C语言 指针和数组区别
  19. C语言 数组指针
  20. C语言 指针数组
  21. C语言 指针数组和数组指针区别
  22. C语言 空指针 NULL
  23. C语言 void 指针
  24. C语言 野指针
  25. C语言 函数声明和定义
  26. C语言 函数声明和调用

未经允许不得转载:猿说编程 » C语言 函数声明和调用

C语言 函数声明和调用 - C语言零基础入门教程相关推荐

  1. C语言 函数指针 - C语言零基础入门教程

    目录 一.函数指针简介 1.常规函数声明 2.函数指针声明 二.函数指针实战 三.猜你喜欢 零基础 Python 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.函数指 ...

  2. C语言 函数不定长参数 - C语言零基础入门教程

    目录 一.前言 二.函数不定长参数简介 1.va_start 2.va_arg 3.va_end 三.自定义不定长参数的函数 1.va_start/va_arg/va_end 案例一 2.va_sta ...

  3. C语言 函数缺省参数 - C语言零基础入门教程

    目录 一.函数简介 1.函数声明 2.函数定义 3.函数调用 4.函数形参和实参 二.函数缺省参数 1.函数全缺省参数 2.函数半缺省参数 三.注意事项 四.猜你喜欢 零基础 C/C++ 学习路线推荐 ...

  4. C语言 函数值传递和址传递 - C语言零基础入门教程

    目录 一.简介 1.函数声明:不需要实现这个函数的功能 2.函数定义:必须实现这个函数的功能 3.函数调用:调用之前必须先声明或者定义 二.函数值传递 三.函数址传递 四.函数值传递和址传递区别 五. ...

  5. C语言 const 修饰函数参数 - C语言零基础入门教程

    C语言 const 修饰函数参数 - C语言零基础入门教程 目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数 ...

  6. C语言 函数声明和定义 - C语言零基础入门教程

    目录 一.简介 二.函数返回值 1.函数没有返回值 2.函数有返回值 三.函数参数 1.函数没有参数 2.函数有固定参数 3.函数有不定长度参数 四.函数声明和定义 1.函数声明:不需要实现这个函数的 ...

  7. C/C++ getchar函数 - C语言零基础入门教程

    目录 一.getchar 函数简介 1.getchar 原理 2.getchar 函数声明 3.getchar 使用场景 二.getchar 函数使用 三.getchar 函数妙用 四.猜你喜欢 零基 ...

  8. C语言 vprintf 函数和 printf 函数区别 - C语言零基础入门教程

    目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用 三.猜你喜欢 零基础 C/C ...

  9. C语言 vprintf 函数 - C语言零基础入门教程

    目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用 三.猜你喜欢 零基础 C/C ...

最新文章

  1. c# 小票打印机打条形码_C#打印小票自带条形码打印
  2. 【机器学习基础】数学推导+纯Python实现机器学习算法19:PCA降维
  3. HDU - 3341 Lost's revenge(AC自动机+状压dp)
  4. Redis的内部运作机制——Redis详解
  5. [置顶] Oracle 11.2.0.3.0 Active Data Guard 遇 ORA-10458、ORA-01152、ORA-01110 错误
  6. java 表达式写法_java内置核心4大函数式接口写法和lambda表达式
  7. 操作系统的概念,功能和目标
  8. hua ge ju hao
  9. 光影之路 GPU架构发展史(4/4)
  10. Java课堂作业03
  11. OpenSearch自定义分词服务
  12. 华为云的Kubernetes实践之路
  13. UOS家庭版(21.2)安装SecureCRT(scrt-9.1.1-2638.ubuntu20-64.x86_64.deb)无法运行问题
  14. 中望3d快捷键命令大全_cad快捷键大全下载
  15. seo优化与html,HTML SEO 优化技巧
  16. Container killed by YARN for exceeding memory limits
  17. 用 Python 分析《红楼梦》(2)
  18. Dave Cheney去了Heptio
  19. cdr怎么新建和删除图层
  20. SimpleDateFormat大写Y和小写y的区别

热门文章

  1. 使用Blink CEP实现差值聚合计算
  2. 万师傅使用云产品,上手简单、开箱即用、省去运维烦恼
  3. Cloud Toolkit 部署应用到 EDAS Kubernetes 集群
  4. 字节码技术在模块依赖分析中的应用
  5. 使用Terraform创建托管版Kubernetes
  6. 使用PyTorch从零开始构建Elman循环神经网络
  7. 理解卷积神经网络的利器:9篇重要的深度学习论文(上)
  8. 当数据中台遇见云原生,智领云看到企业数据转型新方向
  9. 如何选择基于 Kubernetes 的 PaaS?
  10. 2019年程序员薪酬报告:平均年薪超70万!40岁后,这类人不“保值”了