是否包含C源代码中需要的<conio.h>?</conio.h>

时间:2014-10-08 11:36:14

标签: c

我知道函数getch()conio.h中但是我的编译器似乎运行getch()非常好,即使我没有包含conio.h。我使用的是DevC ++。

我不想在不包含库conio.h的情况下编写代码,但今天我在课堂上进行了测试。其中一个问题是要求C程序的输出包含函数getch()但没有库conio.h。我的一位朋友刚回答&#34;编译错误&#34;但老师说使用getch()而不包括conio.h完全没问题。

编写代码而不包含库是没关系的,它会影响程序吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

如果您没有包含相应的标题,编译器必须猜测程序使用的任何库函数的原型。对于像getch()这样的简单函数,猜测可能是正确的,但情况并非总是如此。不正确的猜测会导致神秘的错误。

因此,如果由于某种原因您不想包含特定标题,您应该(至少)明确地为您使用的函数提供正确的原型。

然而,虽然编译器可以容忍各种草率的编码,但它被认为是不好的做法,会给代码的人类读者带来这种邋。。几个月或几年之后,人类读者可能就是你自己。因此,让自己和其他查看代码并使代码尽可能易于阅读的人变得轻松。

大多数长期程序员都会同意阅读旧的源代码可能会令人尴尬。因此,现在养成良好的编码习惯,避免以后的尴尬。 :)

正如其他人所说,conio.h和getch()都是非标准的,所以包括conio.h在内的任何人都可以立即知道谁在读取你的代码,并将其定位到Microsoft环境,因此可能需要进行重大修改在任何其他类型的系统上运行。

PS。如果某些Microsoft编译器在需要时自动包含conio.h甚至stdio.h或stdlib.h,那我至少不会感到惊讶......

答案 2 :(得分:0)

头文件包含函数原型等。较旧的C编译器(例如Microsoft Visual Studio支持的编译器)将函数原型(如果未提供)默认为返回int的函数。这可能就是这里发生的事情。

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