再学C语言30:函数——ANSI C的函数原型

news2024/11/29 9:49:32

一、ANSI C关于函数原型的规则

ANSI C在函数声明中同事说明所使用的的参数类型,即在函数原型中声明返回值类型、参数、参数个数、参数类型

int function(int a, int b); // 形式一
int function(int, int);     // 形式二
                            // 以上两种形式的定义均满足规范要求

好处:编译器可以检查函数调用语句是否和其原型声明相一致,如参数个数是否正确,参数类型是否匹配等;如果有参数类型不匹配但都是数值类型,编译器会把实际参数值转换成形式参数类型相同的值


编译器错误和警告的区别:前者阻止编译继续进行,后者不阻止


示例代码:

#include <stdio.h>

int max_cal(int a, int b);

int main(void)
{
    int i = 7;
    int j = 3;
    float m = 7.0;
    float n = 3.0;
    
    // max_cal(7, 3)和max_cal(7.0, 3.0)等价
    printf("the larger number is %d \n", max_cal(i, j)); // 实参为int类型,与形参类型一致
    printf("the larger number is %d \n", max_cal(m, n)); // 实参为float类型,被转换为int类型

    return 0;
}

int max_cal(a, b) // 比较,求较大值
{
    if(a > b)
    {
        return a;
    }
    else
    {
        return b;
    }
}

运行结果: 

0da925254053471fa4bc9024eb86f77d.png

二、无参数和不确定参数

为了表示一个函数确实不使用参数,需要在圆括号中加入void关键字

void function(void);

一些函数(printf()函数、scanf()函数等)使用的参数个数是变化的,ANSI C允许使用不确定的函数原型,例如对于printf()函数可以使用函数原型:

int printf(char *, ...); // 该原型表示第一个参数是一个字符串,而其余的参数不能确定

 对于参数不确定的函数,C库通过stdarg.h头文件提供了定义该类函数的标准方法

三、函数原型的优点(与ANSI C之前的规范相比)

函数原型是对程序语言的有力补充

有利于编译器主动发现函数使用时可能出现的错误或疏漏

使用函数原型的目的:在编译器第一次调用函数的语句之前向其表明该函数的使用方法

对于一些代码较少的函数,函数原型和函数定义也可以合并,例如上面的示例代码也可以写成以下简洁的形式:

int max_cal(int a, int b)    {return a > b ? a : b;} // 函数原型与函数定义合并
                                                     // 既是函数的定义,也是函数的原型
int main(void)
{
    int i = 7;
    int j = 3;
    float m = 7.0;
    float n = 3.0;

    printf("the larger number is %d \n", max_cal(i, j)); // 实参为int类型,与形参类型一致
    printf("the larger number is %d \n", max_cal(m, n)); // 实参为float类型,被转换为int类型

    return 0;
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于无线通信物联网的水库安全监测系统

水库安全监测一直是我国防洪防汛工作的重点&#xff0c;库区的雨量、水位的实时监测&#xff0c;建立水库监测系统能够有效防止洪涝灾害的发生&#xff0c;确保水库和下游地区的安全。 物通博联推出的水库安全监测系统是基于无线通信物联网技术打造的系统平台&#xff0c;由雨…

路由器基础

交换机基本功能 1.基于源MAC地址学习2.基于目标MAC地址转发3.数据过滤4.防环 交换机基于MAC地址表进行转发&#xff0c;MAC地址表默认自动产生&#xff0c;MAC地址组成三元组&#xff1a;Mac地址、端口、VLAN。默认MAC条目信息存活时间为300s并且可以修改 泛洪&#xff08;洪…

局域网主机状态管理工具LanNeighborManager

有鉴于以下两种需求&#xff0c;做了一个小工具&#xff0c;查看局域网内的IP占用情况及联通状态&#xff1a;1&#xff09;在现场需要分配静态IP&#xff0c;但是不确定已经被占用的IP地址&#xff1b;2&#xff09;查看当前局域网内当前活跃的IP地址。该工具的主要功能有&…

华宏转债上市价格预测

华宏转债基本信息转债名称&#xff1a;华宏转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;5.15亿元。正股名称&#xff1a;华宏科技&#xff0c;今日收盘价&#xff1a;17.68&#xff0c;转股价格&#xff1a;15.65。当前转股价值 转债面值 / 转股价格…

2023.1.2-1.18 AI行业周刊(第131期):程序员的艰辛和感悟

转眼间&#xff0c;还有两周不到的时间&#xff0c;就要到除夕了。今年的春节和元旦离得很近&#xff0c;只有二十多天的时间。 班上部门的同事&#xff0c;一个个也都开始阳康&#xff0c;回到工作岗位&#xff0c;做春节前产品的最后一次版本迭代。 一晃从去年三月份进入新…

3-计算字符串的编辑距离(华为机试)

题目 Levenshtein 距离&#xff0c;又称编辑距离&#xff0c;指的是两个字符串之间&#xff0c;由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符&#xff0c;插入一个字符&#xff0c;删除一个字符。编辑距离的算法是首先由俄国科学…

Bonitasoft认证绕过和RCE漏洞分析及复现(CVE-2022-25237)

一、漏洞原理 漏洞简述 Bonitasoft 是一个业务自动化平台&#xff0c;可以更轻松地在业务流程中构建、部署和管理自动化应用程序&#xff1b; Bonita 是一个用于业务流程自动化和优化的开源和可扩展平台。 Bonita Web 2021.2版本受到认证绕过影响&#xff0c;因为其API认证…

没有为请求的 URL 配置默认文档,并且没有在服务器上启用目录浏览

1、问题 使用asp.net mvc写了个网站&#xff0c;部署后出现&#xff1a; 没有为请求的 URL 配置默认文档&#xff0c;并且没有在服务器上启用目录浏览 这个问题 2、解决办法 网上搜了下&#xff0c;无非是两种方法&#xff1a; 1、在web.config中添加 <system.webServ…

概率论【合集】--猴博士爱讲课

重点章节 条件概率&#xff0c;期望等等 第一课 随机事件和概率 1/6 无放回类题目(一次摸多个) 例1.盒子里有3绿4红共7个小球&#xff0c;无放回的摸3个试求摸出1绿2红的概率例2.钱包里有3张100元&#xff0c;5张10元&#xff0c;3张5元的纸币&#xff0c;随机摸3张&#xff0…

excel图表美化:堆栈式柱状图让趋势变化更明显

平时大家都是怎么做图表的呢&#xff1f;是不是直接在Excel上点击插入图表&#xff0c;就完事儿了&#xff1f;虽然这样也能做出图表&#xff0c;但是必定没什么亮点&#xff0c;老板看久了&#xff0c;自然也就腻了&#xff01;我们每个人都想让自己的的图表看起来漂亮&#x…

BGP基础实验(1.10)

目标: 1、首先为所有路由器配置接口ip和环回 r1&#xff1a; [r1]int lo0 [r1-LoopBack0]ip add 1.1.1.1 24 [r1-LoopBack0]int gi 0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 r2&#xff1a; [r2]int lo0 [r2-LoopBack0]ip add 2.2.2.2 24 [r2-LoopBack0]int gi …

怎么开发自己的微信小程序_微信小程序快速开发步骤

小程序开发除了专业人士会自己开发之外&#xff0c;就是外包开发和模板搭建这两种方法。 外包小程序开发需要持续不断地与外包团队沟通&#xff0c;投入的精力也不少&#xff0c;总体价格不低&#xff0c;基本在万元左右&#xff0c; 最适合新手的还是小程序模板搭建啦~ 微信怎…

JAVA---泛型

一、什么是泛型 Java的泛型 (generics) 是在JDK5中推出的新概念&#xff0c;在泛型推出之前&#xff0c;程序员需要构建一个元素为Object的集合&#xff0c;该集合能够存储任意的数据类型对象&#xff0c;而在使用该集合的过程中&#xff0c;需要程序员明确知道存储每个元素的数…

Qt OpenGL(07)通过递归细分绘制球面

文章目录Qt OpenGL通过递归细分逼近球面思路下面就是绘制的代码&#xff1a;Widget.cpp顶点着色器片段着色器Qt OpenGL通过递归细分逼近球面 在OpenGL中绘制球面&#xff0c;不是太简单的事情。因为球面和圆都不是OpenGL所支持的图元&#xff0c;因此我们将通过一种称为递归细分…

年货小史:最土年货中藏着最真实的烟火气

农历新年很快就要到了&#xff0c;这让我有些恍惚&#xff0c;觉得从前那个满是烟火的新年&#xff0c;仿佛已经是很遥远的事了。几家电商平台最近又开始了红红火火的年货节&#xff0c;上去转了转&#xff0c;几个平台看下来&#xff0c;拼多多的“年味”似乎最贴近记忆中的烟…

MySQL的锁机制之全局锁和表锁

文章目录前言一、全局锁全局锁的介绍以及使用全局锁的应用场景不加锁导致的危害加锁和其他方法对比二、表锁表锁的介绍以及使用表锁的应用场景前言 对mysql锁的总结学习&#xff0c;本文将围绕&#xff0c;加锁的概念&#xff0c;加锁的应用场景和优化&#xff0c;以及不加锁会…

【C进阶】第十四篇——字符串函数

strlen - 求字符串长度 函数介绍 模拟实现(三种方式) strcpy - 字符串拷贝 函数介绍 模拟实现 strcat - 字符串追加 函数介绍 模拟实现 strcmp - 字符串比较 函数介绍 模拟实现 strstr - 字符串查找 函数介绍 模拟实现 strtok - 字符串分割 函数介绍 strerror…

小黑周末惊心动魄进“村”赶考,周一继续拖着疲惫的身体来实习的leetcode之旅:968. 监控二叉树

小黑看完题解思路后代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def minCameraCover(self, root: …

前端、后台(ueditor)富文本的使用和回显

前端、后台富文本的使用前端如何配置ueditorjson文件注释一、html、js引用ueditor二、后端返回ueditor的json文件1.配置接受ueditor的接口三、回显效果图&#xff1a; 前端如何配置ueditor 下载ueditor资源文件地址&#xff1a; ueditor资源文件压缩包下载 下载解压后放在…

LLM笔记

LLM其实就是large language model&#xff0c;大语言模型。 AGI其实就是Artificial General Intelligence&#xff0c;通用人工智能。 如果对“最终任务”进一步进行分类&#xff0c;又大致可以分为两大不同类型的任务&#xff1a;自然语言理解类任务和自然语言生成类任务。如果…