热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c/c++开发分享在C中不使用函数原型有什么好处吗?

我正在使用一些不包含某类函数的函数原型的C代码。不使用函数原型有什么好处吗?这些函数从不相互调用,也没有参数。代码变化很大,所以也许它只需要编辑一行?函数原型用于外部函数。我的规则

我正在使用一些不包含某类函数的函数原型的C代码。 不使用函数原型有什么好处吗? 这些函数从不相互调用,也没有参数。 代码变化很大,所以也许它只需要编辑一行?

    函数原型用于外部函数。 我的规则是每个非静态函数都得到一个原型,除了main()。 我使用’-Wmissing-prototypes’GCC选项。 通常它捕获的是当我忘记声明一个函数静态时。

    另外,用C语言声明函数:

    void function(void); 

    而不是这样:

     void function(); 

    因为第二种方式意味着该函数采用了未指定数量的参数,这不是您想要的(它与ANSI C之前的兼容性)。

    而且我不知道它是否在严格的情况下是合法的。

    应用于函数原型的“代码变化很大”也是一个糟糕的代码味道。 如果接口(函数签名)发生了很大变化,那么函数的职责可能不太清楚。 首先要弄清楚如何将问题划分为次要职责,并且只有在开始编写代码之后。

    “所以也许只需要少一行来编辑?”

    在这种情况下,这是唯一可能的“好处”,即懒惰。

    更少的代码改变是我能想到的唯一“优势”。 通常这只是’懒惰’

    无论如何,缺点更为重要:你必须在一个源文件中拥有所有function; 源文件中的函数顺序现在很重要,等等。另外,其他人会看到/为头文件混淆…最佳实践是.c和.h它。

    我看到的唯一好处是,每次更改函数本身时都不必更新函数原型。

    代码变化很大,所以也许它只需要编辑一行?

    我猜这就是原因。 我想不出任何其他原因 – 编译速度(实际上)也没有改变,执行时间也没有,只是更新代码的时间。

    我能想到的唯一优势是它可以节省你必须将函数的第一行复制并粘贴到.c或.h文件的prototypes部分。

    对于其他文件中引用的函数,您别无选择,只能拥有原型。

    对于具有文件范围的函数(即静态函数),将所有原型放在文件顶部的块中是有用的。 这样,任何静态函数都可以从该文件中的任何位置调用。 如果没有原型,函数A()只能在代码中声明B()之上调用函数B()。

    此外,如果范围内没有原型,一些编译器会对参数做出不安全的假设。

    此外,如果您编写的代码必须符合MISRA-C,则要求所有函数都在范围内具有原型。

    我还提倡确保原型包含参数名称,而不仅仅是它们的类型(这是合法的),因为它只是通过查看原型来阐明参数的用途。

    它打字较少,因此可能会降低您的RSI风险。

      以上就是c/c++开发分享在C中不使用函数原型有什么好处吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(编程笔记)。


      推荐阅读
      • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
        本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
      • ejava,刘聪dejava
        本文目录一览:1、什么是Java?2、java ... [详细]
      • Java序列化对象传给PHP的方法及原理解析
        本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
      • Java中包装类的设计原因以及操作方法
        本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
      • 恶意软件分析的最佳编程语言及其应用
        本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
      • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
      • c语言基础编写,c语言 基础
        本文目录一览:1、C语言如何编写?2、如何编写 ... [详细]
      • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
      • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
      • C语言的经典程序有哪些
        本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
      • 【技术分享】一个 ELF 蠕虫分析
        【技术分享】一个 ELF 蠕虫分析 ... [详细]
      • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
      • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
      • C++字符字符串处理及字符集编码方案
        本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
      • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
      author-avatar
      一切近乎完美
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有