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

功能原型在主要内部声明-最佳实践?-Functionprototypedeclaredinsidemain-bestpractice?

Isthisagoodstyletohavethefunctionprototypedeclaredinsideofthemainfunction?这是在主函数内部声明

Is this a good style to have the function prototype declared inside of the main function?

这是在主函数内部声明函数原型的好方法吗?

I was looking at a C tutorial, I think is quite out of date. However, they declare the function prototype inside of main. I normally declare outside before main.

我正在看一个C教程,我认为已经过时了。但是,他们在main中声明了函数原型。我通常在主要之前宣布在外面。

#include 

int main ()
{
    char myname [30];
    int theage;
    int getage ();

    printf ("\nEnter your name:");
    gets (myname);
    theage = getage ();
    printf("\n AGE = %d and NAME = %s", theage, myname);
    return 0;
}

int getage ()
{
    int myage; /* local to only getage() */

    printf ("\nEnter your age: ");
    scanf ("%d",&myage);
    return (myage);
}

5 个解决方案

#1


16  

I personally would say "no" for several reasons:

我个人会说“不”,原因如下:

  • it makes the code for main longer
  • 它使主要代码更长

  • it may confuse a newbie into think ing the function is scoped by main
  • 它可能会让一个新手感到困惑,认为该功能是由main主导的

  • in real code, I would normally put the function in a different compilation unit and #include its header file
  • 在实际代码中,我通常会将函数放在不同的编译单元中并#include其头文件

#2


5  

I'll also say no with the additional reason that if you start using explicit declarations all over the code, you will most definitely get unresolved externals when the function you are calling suddenly changes its signature. If you have ONE declaration in ONE header file, you only need to change ONE declaration when the function changes.

我还会说,如果您开始在整个代码中使用显式声明,那么当您调用的函数突然改变其签名时,您肯定会得到未解析的外部因素。如果在一个头文件中有一个声明,则只需在函数更改时更改一个声明。

However, I'd say yes because of the following reason: If you are just writing a simple test method that's written for a single use only, i.e. if you want to test something really quick and then discard the function right away. Then it can be nifty to just throw in a declaration right before you want to make the call.

但是,由于以下原因,我会说是的:如果您只是编写一个仅为一次性使用而编写的简单测试方法,即如果您想要快速测试某些内容然后立即丢弃该功能。然后,在您想要拨打电话之前,只需输入一个声明就可以了。

For production code -> No no no ! :)

对于生产代码 - >不不不! :)

#3


4  

It's not a good style.

这不是一个好的风格。

Either declare the local function prototypes at the beginning or move them to a header-file.

要么在开始时声明本地函数原型,要么将它们移动到头文件。

Function protoypes (and external variables as well) can be declared almost everywhere in the c-language. However, just because it's possible shouldn't be no reason to write spaghetti style C.

函数原型(以及外部变量)几乎可以在c语言的任何地方声明。然而,仅仅因为它可能不应该没有理由写意大利面风格C.

It makes the code less readable. For me such practices are a clear sign of code-smell.

它使代码的可读性降低。对我来说,这种做法是代码嗅觉的明显标志。

#4


1  

i think that's just a small example for the tutorial... this is what you do when you start to introduce functions...

我认为这只是本教程的一个小例子...这就是你开始介绍函数时所做的事情......

I agree with Neil...

我同意尼尔......

#5


1  

Since I haven't jumped through the required number of hoops in this pony show I have no choice but to post this comment as an answer.

由于我没有在这个小马表演中跳过所需数量的篮球,我别无选择,只能发表这个评论作为答案。

Keep in mind that this is just a snippet from a book and not the kind of code that one sees in a production environment. The code snippet is fine but not ideal. Neil gave the best answer so I gave him +1. I would note his 3rd point if you really want to know how it's done outside of tutorial/text books.

请记住,这只是书中的一个片段,而不是人们在生产环境中看到的那种代码。代码片段很好但不理想。尼尔给出了最好的答案,所以我给了他+1。如果你真的想知道它是如何在教程/教科书之外完成的,我会注意到他的第三点。

Also, a point since I'm making them: the "stdio.h" vs is simply a way of telling the preprocessor where to search for the file stdio.h. Again, in most situations you will see stdio.h surrounded by <> instead of "". However, your own header files, as mentioned by Neil's 3rd point, will be surrounded by "".

此外,我正在制作它们:“stdio.h”vs只是告诉预处理器在哪里搜索文件stdio.h的一种方式。同样,在大多数情况下,您会看到stdio.h被<>而不是“”包围。但是,正如Neil的第3点所提到的,你自己的头文件将被“”包围。


推荐阅读
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • This request pertains to exporting the hosted_zone_id attribute associated with the aws_rds_cluster resource in Terraform configurations. The absence of this attribute can lead to issues when integrating DNS records with Route 53. ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • ------------------------------————————————————————————————1.定义一个类,实现与被增强对象相同的接口2.在类中定义一个对象,记住被增强 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • Linux环境下C语言实现定时向文件写入当前时间
    本文介绍如何在Linux系统中使用C语言编程,实现在每秒钟向指定文件中写入当前时间戳。通过此示例,读者可以了解基本的文件操作、时间处理以及循环控制。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • CSS高级技巧:动态高亮当前页面导航
    本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ... [详细]
  • 本文介绍两道有趣的编程问题:一是寻找给定数字n的连续数字序列及其个数,二是模拟一个翻杯子的游戏。同时附带一道智商题供读者思考。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
author-avatar
碎蜂CYM夜一
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有