C语言,函数形参与实参个数不一致问题
最近阅读工程代码的时候,同一个函数,不同场景调用时,输入的实参个数不一样,但是编译却没有问题。查看函数的定义,相关的C文件里并没有给形参指定默认值,这就很奇怪了。
最终,发现在函数相关的头文件里有给形参指定默认值。这就能解释通为什么形参和实参个数不一致,编译能正常通过的问题了。下面是示例代码。
/*parainput.c 文件内容*/
#include <stdio.h>
void sum(int a,int b,int c)
{
int result = a + b + c;
printf("result = %d\n",result);
}
/*parainput.h 文件内容*/
#ifndef _PARAINPUT_H
#define _PARAINPUT_H
void sum(int a,int b=1,int c=2);
#endif
/*main.c 文件内容*/
#include <stdio.h>
#include "parainput.h"
void test_01(void)
{
int a = 10;
sum(a);
return;
}
void test_02(void)
{
int a = 10,b = 20;
sum(a,b);
}
void test_03(void)
{
int a = 10,b = 20,c = 30;
sum(a,b,c);
}
int main(void)
{
test_01();
test_02();
test_03();
return 0;
}
用G++进行编译,最终运行结果如下。
result = 13
result = 32
result = 60
--------------------------------
Process exited after 0.006126 seconds with return value 0
请按任意键继续. . .
C语言,函数形参与实参个数不一致问题的更多相关文章
- c++之函数形参和实参
c++之函数形参和实参讲解 1.非地址型参数 在c++中实现模块化编程时,我们形成会遇到对自定义的函数模块传入参数的操作,即形参.这里主要讲解一个非地址型的形参. 不多说,先看代码: #include ...
- C语言之形参和实参
一 形参与实参 1).定义 形参:形式参数. 就是定义函数的时候,写在函数名小括号后面的参数叫形参 实参:实际参数. 就是调用函数的时候,调用函数时写在函数名小括号后面的参数就叫实参 2).注意项 a ...
- python之函数形参、实参、可变长参数整体使用和分类
形参与实参 '''def fn(形参们): pass fn(实参们)'''# 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表 ...
- JavaScript函数的中实参个数和形参个数的获取
首先先理解下什么是函数的形参和函数的实参,其实很好理解的,下面举例说明 如何获取形参的长度以及实参的长度 获取实参的长度 可以看到控制台输出的长度是3, 这里有疑问了,arguments是什么那? a ...
- python函数—形参、实参、位置参数、关键字参数
1.通过def function_name([parameter]): 定义,函数一遇到return即结束运行.如果函数没有定义返回值,则返回None,如果定义了一个返回值,则返回该对象,如果一个re ...
- 【学习笔记】--- 老男孩学Python,day10, 初识函数 形参、实参
函数:对功能的封装语法: def 函数名(形参): 函数体 函数名(实参) 函数名:命名规则和变量一样 函数的返回值: return, 函数执行完毕. 不会执行后面逻辑 1. 如果函数中不写retur ...
- js函数形参和实参的区别
在<Javascript权威指南>中这样定义: 参数有形参(parameter)和实参(argument)的区别,形参相当于函数中定义的变量,实参是在运行时的函数调用时传入的参数. 说明白 ...
- C++函数形参与实参交换
c++中函数的实参传递到形参的值是单向的,改变形参并不会影响实参. #include <iostream> using namespace std; void swap(int a, in ...
- c语言函数实现交换两个数的值
代码: #include <stdio.h> void swap(int x,int y) { int temp; temp = x; x = y; y = temp; printf(&q ...
- C语言关于形参与实参,以及系统堆栈的关系
随机推荐
- text, data and bss: Code and Data Size Explained
[来源]
- css - 去掉图片下的白边
造成原因: 图片的 display 属性默认是 inline ,而这个属性的 vertical-align 的默认值是baseline. 解决办法1( 建议使用block , 对 ie浏览器 比较友 ...
- scikit-learn.datasets 机器学习库
scikit-learn是一个用于Python的机器学习库,提供了大量用于数据挖掘和数据分析的工具.以下是对这些函数和方法的简要描述: clear_data_home: 清除数据集目录的内容. dum ...
- [转帖]RHEL/CentOS 7中的网络暨network.service与NetworkManager.service详解
在RHEL/CentOS 6及以前的版本中,网络功能是通过一系列网络相关的脚本文件实现,如/etc/init.d/network文件,及如下/sbin/if*文件等. [root@myserver ~ ...
- [转帖]ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
https://www.cnblogs.com/senior-engineer/p/8668723.html 前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列产品,以此来扩大 ...
- [转帖]Oracle、SQL Server、MySQL数据类型对比
Oracle.SQL Server.MySQL数据类型对比 - 知乎 (zhihu.com) 1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数 ...
- [转帖]Fiddler抓取Chrome浏览器访问baiud.com报NET::ERR_CERT_COMMON_NAME_INVALID
错误现象 解决方法: 1.Chrome浏览器地址栏中输:chrome://net-internals/#hsts 2.在Query HSTS/PKP domain处搜索www.baidu.com网站, ...
- [转帖]Redash -- Redash部署安装docker版
向导 官网 1.环境准备 1.1 安装docker和docker-compose 1.2 安装nodejs和npm 2.安装Redash 官网 主页 Developer Guide github 讨论 ...
- 阿里的AIGC数据库工具: Chat2DB的学习与使用
阿里的AIGC数据库工具: Chat2DB的学习与使用 背景 今天陪家中老人去完医院后, 继续回来学习时发现 阿里巴巴的 chat2DB已经发布的 2.0.1的版本. 想着下载下来试试. 主要也是备忘 ...
- [转帖]如何在本地编译安装部署自动化回归测试平台 AREX
https://zhuanlan.zhihu.com/p/613877597 AREX 官方 QQ 交流群:656108079 本文将详细为大家介绍一下自动化回归测试平台 AREX 以及如何在本地进行 ...