在vs2005的stdio.h头文件中
#ifndef _STDSTREAM_DEFINED
#define stdin (&__iob_func()[0])
#define stdout (&__iob_func()[1])
#define stderr (&__iob_func()[2])
#define _STDSTREAM_DEFINED
#endif
有定义了__iob_func,因此自己写一个__iob,调用__iob_func
#include "stdio.h"
extern "C" {
FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};
}
另外,对于高版本的VisualStudio,使用__acrt_iob_func替代了__iob_func,easyx图形库编译时又会报错无法解析的外部符号 __iob_func,需要添加
#include "stdio.h"
extern "C" {
FILE * __cdecl __iob_func(unsigned i) {
return __acrt_iob_func(i);
}
}