getch()

ACEspaceWalker 2012-04-19 08:11:02
我头文件只有一个<stdio.h>,没有<conio.h>,但为什么能用getch()?
如:
#include <stdio.h>
void main()
{
getch();
}
这个竟然能正常运行!why?
...全文
527 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
LQH0216 2014-11-25
  • 打赏
  • 举报
回复
有些编译器会自动给你添加getch(),所谓“智能”
啸傲居士 2012-04-21
  • 打赏
  • 举报
回复
rhel 6.2,gcc version 4.4.6下编译不成功(提示如下),编译器的问题吧,没必要这么认真。


[root@localhost Desktop]# gcc test.c -o test
/tmp/ccHA0Hk1.o: In function `main':
test.c:(.text+0x7): undefined reference to `getch'
collect2: ld returned 1 exit status
[root@localhost Desktop]# gcc -v
Using built-in specs.
Target: i686-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch=i686 --build=i686-redhat-linux
Thread model: posix
gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)
[root@localhost Desktop]#
didijiji 2012-04-21
  • 打赏
  • 举报
回复
见仁见智!
WayneXuan 2012-04-21
  • 打赏
  • 举报
回复
我以前用wintc时也注意过,当时还以为getch()是在stdio.h里呢,现在知道了 getch() 是 conio.h 里的函数,但是Turbo C 2.0 版允许不用 conio 头文件也可以使用 getch(),就像 scanf() 和 printf() 都是 stdio.h 里的函数,也可以不用 stdio 头文件一样。如果换成 Turbo C++ 3.0 版,就不允许省略头文件预处理命令了
Binzo 2012-04-21
  • 打赏
  • 举报
回复
why not?
cxdzxc 2012-04-21
  • 打赏
  • 举报
回复
和编译器默认有关
疯疯癫癫 2012-04-20
  • 打赏
  • 举报
回复
+1
[Quote=引用 5 楼 的回复:]
在你的<stdio.h>文件中 找 getch
[/Quote]
x10101_21 2012-04-20
  • 打赏
  • 举报
回复
这个事你编辑器的原因吧,很多编译器都不用编写#include"stdio.h"但是可以直接用里面的函数。
pp25210 2012-04-20
  • 打赏
  • 举报
回复
GCC编译提示:
warning: implicit declaration of function 'getch' [-Wimplicit-function-declaration]
SVKING 2012-04-20
  • 打赏
  • 举报
回复
你是神马编译器啊,,,我的gcc不行,vc6.0也不行
_了凡_ 2012-04-20
  • 打赏
  • 举报
回复
把警告全部打开,应该会有的吧,例如:
程序没有包含<stdlib.h>,却使用了exit()函数,gcc报如下警告:
cu.c:5: warning: implicit declaration of function ‘exit’
cu.c:5: warning: incompatible implicit declaration of built-in function ‘exit’
ghlhy0505 2012-04-20
  • 打赏
  • 举报
回复
确实奇怪···难道你把conio.h放stdio.h里面了?
AnYidan 2012-04-20
  • 打赏
  • 举报
回复
在你的<stdio.h>文件中 找 getch
ACEspaceWalker 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
在你的<stdio.h>文件中 找 getch
[/Quote]
/* stdio.h

Definitions for stream input/output.

Copyright (c) Borland International 1987,1988
All Rights Reserved.
*/
#if __STDC__
#define _Cdecl
#else
#define _Cdecl cdecl
#endif

#if !defined(__STDIO_DEF_)
#define __STDIO_DEF_

#ifndef _SIZE_T
#define _SIZE_T
typedef unsigned size_t;
#endif
#ifndef NULL
# if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
# define NULL 0
# else
# define NULL 0L
# endif
#endif

#if !defined(__STDARG)
#include <stdarg.h>
#endif

/* Definition of the file position type
*/
typedef long fpos_t;

/* Definition of the control structure for streams
*/
typedef struct {
short level; /* fill/empty level of buffer */
unsigned flags; /* File status flags */
char fd; /* File descriptor */
unsigned char hold; /* Ungetc char if no buffer */
short bsize; /* Buffer size */
unsigned char *buffer; /* Data transfer buffer */
unsigned char *curp; /* Current active pointer */
unsigned istemp; /* Temporary file indicator */
short token; /* Used for validity checking */
} FILE; /* This is the FILE object */

/* Bufferisation type to be used as 3rd argument for "setvbuf" function
*/
#define _IOFBF 0
#define _IOLBF 1
#define _IONBF 2

/* "flags" bits definitions
*/
#define _F_RDWR 0x0003 /* Read/write flag */
#define _F_READ 0x0001 /* Read only file */
#define _F_WRIT 0x0002 /* Write only file */
#define _F_BUF 0x0004 /* Malloc'ed Buffer data */
#define _F_LBUF 0x0008 /* line-buffered file */
#define _F_ERR 0x0010 /* Error indicator */
#define _F_EOF 0x0020 /* EOF indicator */
#define _F_BIN 0x0040 /* Binary file indicator */
#define _F_IN 0x0080 /* Data is incoming */
#define _F_OUT 0x0100 /* Data is outgoing */
#define _F_TERM 0x0200 /* File is a terminal */

/* End-of-file constant definition
*/
#define EOF (-1) /* End of file indicator */

/* Number of files that can be open simultaneously
*/
#define OPEN_MAX 20 /* Total of 20 open files */
#define SYS_OPEN 20

/* Default buffer size use by "setbuf" function
*/
#define BUFSIZ 512 /* Buffer size for stdio */

/* Size of an arry large enough to hold a temporary file name string
*/
#define L_ctermid 5 /* CON: plus null byte */
#define L_tmpnam 13 /* tmpnam buffer size */

/* Constants to be used as 3rd argument for "fseek" function
*/
#define SEEK_CUR 1
#define SEEK_END 2
#define SEEK_SET 0

/* Number of unique file names that shall be generated by "tmpnam" function
*/
#define TMP_MAX 0xFFFF

/* Standard I/O predefined streams
*/
extern FILE _Cdecl _streams[];

#define stdin (&_streams[0])
#define stdout (&_streams[1])
#define stderr (&_streams[2])
#define stdaux (&_streams[3])
#define stdprn (&_streams[4])

void _Cdecl clearerr (FILE *stream);
int _Cdecl fclose (FILE *stream);
int _Cdecl fflush (FILE *stream);
int _Cdecl fgetc (FILE *stream);
int _Cdecl fgetpos (FILE *stream, fpos_t *pos);
char *_Cdecl fgets (char *s, int n, FILE *stream);
FILE *_Cdecl fopen (const char *path, const char *mode);
int _Cdecl fprintf (FILE *stream, const char *format, ...);
int _Cdecl fputc (int c, FILE *stream);
int _Cdecl fputs (const char *s, FILE *stream);
size_t _Cdecl fread (void *ptr, size_t size, size_t n, FILE *stream);
FILE *_Cdecl freopen (const char *path, const char *mode,
FILE *stream);
int _Cdecl fscanf (FILE *stream, const char *format, ...);
int _Cdecl fseek (FILE *stream, long offset, int whence);
int _Cdecl fsetpos (FILE *stream, const fpos_t *pos);
long _Cdecl ftell (FILE *stream);
size_t _Cdecl fwrite (const void *ptr, size_t size, size_t n,
FILE *stream);
char *_Cdecl gets (char *s);
void _Cdecl perror (const char *s);
int _Cdecl printf (const char *format, ...);
int _Cdecl puts (const char *s);
int _Cdecl rename (const char *oldname, const char *newname);
void _Cdecl rewind (FILE *stream);
int _Cdecl scanf (const char *format, ...);
void _Cdecl setbuf (FILE *stream, char *buf);
int _Cdecl setvbuf (FILE *stream, char *buf, int type, size_t size);
int _Cdecl sprintf (char *buffer, const char *format, ...);
int _Cdecl sscanf (const char *buffer, const char *format, ...);
char *_Cdecl strerror (int errnum);
FILE *_Cdecl tmpfile (void);
char *_Cdecl tmpnam (char *s);
int _Cdecl ungetc (int c, FILE *stream);
int _Cdecl vfprintf (FILE *stream, const char *format, va_list arglist);
int _Cdecl vfscanf (FILE *stream, const char *format, va_list arglist);
int _Cdecl vprintf (const char *format, va_list arglist);
int _Cdecl vscanf (const char *format, va_list arglist);
int _Cdecl vsprintf (char *buffer, const char *format, va_list arglist);
int _Cdecl vsscanf (const char *buffer, const char *format, va_list arglist);

#if !__STDC__
int _Cdecl fcloseall(void);
FILE *_Cdecl fdopen (int handle, char *type);
int _Cdecl fgetchar (void);
int _Cdecl flushall (void);
int _Cdecl fputchar (int c);
int _Cdecl getw (FILE *stream);
int _Cdecl putw (int w, FILE *stream);
char *_Cdecl _strerror(const char *s);
int _Cdecl unlink (const char *path);

#endif

int _Cdecl _fgetc (FILE *stream); /* used by getc() macro */
int _Cdecl _fputc (char c, FILE *stream); /* used by putc() macro */

/* The following macros provide for common functions */

#define ferror(f) ((f)->flags & _F_ERR)
#define feof(f) ((f)->flags & _F_EOF)
#define fileno(f) ((f)->fd)
#pragma warn -pro
#define remove(path) unlink(path)
#pragma warn .pro

#define getc(f) \
((--((f)->level) >= 0) ? (unsigned char)(++(f)->curp)[-1] : \
_fgetc (f))
#define putc(c,f) \
((++((f)->level) < 0) ? (unsigned char)((++(f)->curp)[-1]=(c)) : \
_fputc ((c),f))

#define getchar() getc(stdin)
#define putchar(c) putc((c), stdout)

#define ungetc(c,f) ungetc((c),f) /* traditionally a macro */

#endif


你们能找到吗?
hehe123698 2012-04-19
  • 打赏
  • 举报
回复
我写的时候也没用到你说的头文件
Lactoferrin 2012-04-19
  • 打赏
  • 举报
回复
自动声明?
muyi66 2012-04-19
  • 打赏
  • 举报
回复
能运行不就好了嘛,管它有没有conio.h
evencoming 2012-04-19
  • 打赏
  • 举报
回复
dev-cpp?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧