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语言关于形参与实参,以及系统堆栈的关系
 
随机推荐
- [转帖]Nginx 保留 Client 真实 IP
			
https://lqingcloud.cn/post/nginx-01/#:~:text=%E5%9C%A8%20Nginx%20%E4%B8%AD%E5%8F%AF%E4%BB%A5%E9%80%9 ...
 - [转帖]signal 11 (SIGSEGV)错误排查
			
https://www.jianshu.com/p/a4250c72d391 jni调试最蛋疼的就是signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault a ...
 - [转帖]ASH、AWR、ADDM区别联系
			
==================================================================================================== ...
 - [转帖]skywalking配置nacos集群模式
			
版本: name version nacos 1.1.0 skywalking 6.2.0 elasticsearch 6.3.2 es集群管理工具 cerebro-0.8.3 https://git ...
 - PostgreSQL简单添加只读用户的方法
			
1. 添加了白名单只读来避免开发同事错误的修改数据库内的数据, 但是他们总想去查询数据库的内容. 最简单的办法是修改pg_hba.conf添加只读用户. 2. 添加只读用户. 使用psql登录pg数据 ...
 - log4j-漏洞修复
			
Log4j漏洞修复 修复参考文档:https://www.cert.org.cn/publish/main/9/2021/20211215154225883558274/202112151542258 ...
 - SPI在Java中的实现与应用 | 京东物流技术团队
			
1 SPI的概念 API API在我们日常开发工作中是比较直观可以看到的,比如在 Spring 项目中,我们通常习惯在写 service 层代码前,添加一个接口层,对于 service 的调用一般也都 ...
 - csv用Excel打开出现乱码
			
CSV用Excel打开出现乱码 今天出现一个问题 使用wps打开不会出现乱码.但使用 excel 打开的时候会出现乱码. 其实在我们把文件流转成文件的时候需要在bolb 对象前加上unicode标识, ...
 - TypeScript中的元组 Tuple
			
元组类型 // 元组类型:表示一个已知元素数量和类型的数组,各元素的类型不必相同 let undata: [string, '男'| '女']; //已知数量是两个.类型分别是字符串和男或者女 und ...
 - 微信小程序-页面跳转数据传递
			
在之前的文章当中我们都实现了一个功能就是可以从上一个页面传递数据给下一个页面,那么我们能不能从下一个页面传递数据给上一个页面呢,答案是可以的. 所以说本文这次主要介绍的内容就是返回上一个页面时传递参数 ...