为何C++使用getch()需包含conio.h,C却无需?(CodeBlocks环境)
关于C/C++中getch()头文件依赖的问题解答
首先明确:
getch()不是C或C++标准库中的函数,它是DOS时代Borland编译器引入的非标准函数,目前仅Windows平台下的部分编译器(比如CodeBlocks使用的MinGW)仍保留对它的支持。你遇到的C程序无需包含
conio.h就能运行的原因,是MinGW的C编译器(gcc)做了特殊处理:它将getch()的声明隐式加入了标准头文件stdio.h中,所以即便你没显式引入conio.h,编译器也能找到该函数的声明,链接阶段也能匹配到对应的实现。而C编译器(g)对标准的遵循更严格,不会在
stdio.h或stdlib.h这类标准头文件中混入非标准函数的声明,因此必须显式包含conio.h才能让编译器识别getch(),这也是你引入stdio.h和stdlib.h无法解决问题的原因。额外提醒:
conio.h是非标准头文件,跨平台兼容性极差。如果需要编写可移植代码,建议使用标准库替代方案,比如C++中可以用std::cin.get()(注意处理残留换行符),Windows平台下也可以使用系统API如ReadConsoleInput等。
内容的提问来源于stack exchange,提问作者Asmaa Abd El-Nasser
相关产品推荐
相关产品推荐

