首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C源代码中是否需要include<conio.h>?

在C源代码中是否需要include<conio.h>?
EN

Stack Overflow用户
提问于 2014-10-08 19:36:14
回答 3查看 3.1K关注 0票数 0

我知道函数getch()是用conio.h编写的,但是不知何故,我的编译器似乎可以很好地运行getch(),即使我没有包含conio.h。我使用的是DevC++。

这并不是说我想编写不包含库conio.h的代码,但今天我在我的类中进行了一个测试。其中一个问题要求提供C程序的输出,该程序包含函数getch()但不包含库conio.h。我的一个朋友只回答了“编译错误”,但是老师说使用不包含conio.hgetch()是非常好的。

那么,不包含库就可以编写代码了吗?这会影响程序吗?

EN

回答 3

Stack Overflow用户

发布于 2014-10-08 19:59:28

这取决于编译器...conio.h是一个C头文件,主要由MS-DOS编译器用来提供控制台输入/输出。1它不是C标准库的一部分,也不是由POSIX定义的。在现代编译器中,不使用conio.h。

票数 1
EN

Stack Overflow用户

发布于 2014-10-08 20:02:22

阅读C源代码的实体有两种:编译器(我猜还有解释器)和程序员。

如果您没有包含适当的头文件,编译器将不得不猜测程序使用的任何库函数的原型。对于像getch()这样的简单函数,猜测可能是正确的,但情况并不总是如此&错误的猜测可能会导致神秘的bug。

因此,如果出于某种原因,您不想包含特定的头文件,那么您应该(至少)显式地为您使用的函数提供一个正确的原型。

然而,虽然编译器可以容忍各种草率的编码,但将这种草率的代码强加给代码的人类读者被认为是一种糟糕的做法。而那个人类读者可能是几个月或几年后的你自己。因此,让您自己和其他查看您的代码并使您的代码尽可能易于阅读的人感到轻松。

大多数长期程序员都会同意,阅读自己的旧源代码可能是一种尴尬的做法。所以现在就养成良好的编码习惯,避免以后的尴尬。:)

正如其他人所指出的,conio.h和getch()是非标准的,因此包含conio.h可以让任何阅读您的代码的人立即知道它针对的是Microsoft环境,因此可能需要进行重大修改才能在任何其他类型的系统上运行。

PS。如果一些微软编译器在需要时自动包含conio.h甚至stdio.h或stdlib.h,我一点也不会感到惊讶……

票数 1
EN

Stack Overflow用户

发布于 2014-10-08 20:12:59

头文件包含函数原型等。较旧的C编译器,例如Microsoft Visual Studio支持的编译器,如果没有提供函数原型,则会将函数原型默认到返回int的函数。这可能就是这里正在发生的事情。

您应该会得到一个警告,大意是它已经默认了原型。如果没有,那么您可能正在包含另一个包含conio.h的头文件,或者您可能正在不需要它的环境中编译(正如其他人所说的那样)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26255966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档