码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 《C和指针》笔记25: 函数原型(函数声明)


    **函数原型 (functionprototype)**总结了函数定义的起始部分的声明,向编译器提供有关该函数应该如何调用的完整信息。使用原型最方便(且最安全)的方法是把原型置于一个单独的文件,当其他源文件需要这个函数的原型时,就使用#include指令包含该文件。这个技巧避免了错误键入函数原型的可能性,它同时简化了程序的维护任务,因为这样只需要该原型的一份物理拷贝。如果原型需要修改,你只需要修改它的一处拷贝。

    例如定义一个头文件func.h,在里面包含函数的原型:

    int *func( int *value, int len );
    
    • 1

    然后在需要使用时包含这个头文件。

    #include "func.h"
    
    • 1

    这个方法的好处:

    1. 现在函数原型具有文件作用域,所以原型的一份拷贝可以作用于整个源文件,不需要函数每次调用前单独书写一份函数原型。
    2. 现在函数原型只书写一次,这样就不会出现多份原型的拷贝之间的不匹配现象。
    3. 如果函数的定义进行了修改,我们只需要修改原型,并重新编译所有包含了该原型的源文件即可。
    4. 如果函数的原型同时也被#include指令包含到定义函数的文件中,编译器就可以确认函数原型与函数定义的匹配。

    函数原型是很重要的,当程序调用一个无法见到原型的函数时,编译器便认为该函数返回一个整型值。对于那些并不返回整型值的函数,这种认定可能会引起错误。

    假设有一个函数xyz,它返回float值3.14。用于表示这个浮点数的二进制位模式如下:01000000010010001111010111000011

    现在假定函数是这样被调用的:

    float f;
    ...
    f = xyz();
    
    • 1
    • 2
    • 3

    如果在函数调用之前编译器无法看到它的原型,它便认定这个函数返回一个整型值,并产生指令将这个值转换为float,然后再赋值给变量f。

    函数返回的位如上所示。转换指令把它们解释为整型值1078523331,并把这个值转换为float类型,结果存储于变量f中。为什么函数的返回值实际上已经是浮点值的形式时,还要执行类型转换呢?编译器并没有办法知道这个情况,因为没有原型或声明告诉它这些信息。这个例子说明了为什么返回值不是整型的函数具有原型是极为重要的。

    参考

    1. 《C和指针》
  • 相关阅读:
    目标检测笔记(十四): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
    最优化理论与方法1
    线下Meetup:在数智化转型背景下,火山引擎VeDI的大数据技术揭秘
    黑客(网络安全)技术自学——高效学习
    基于物联网的室内环境检测云系统设计(树莓派RPI、Arduino、智能家居、RFID、APP)
    PyTorch修改为自定义节点
    下载xlsx中的URL到指定目录
    ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能
    原来ConcurrentHashMap里有这么多知识点
    一次性分清zip、gzip、bzip2、tar命令
  • 原文地址:https://blog.csdn.net/subtitle_/article/details/132868334
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号