SDL_init()导致c文件不输出任何内容
我有以下代码SDL_init()导致c文件不输出任何内容,c,sdl,C,Sdl,我有以下代码 #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_thread.h> #ifdef __MINGW32__ #undef main #endif int main (int argc, char **argv) { printf ("Kishore\n"); if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_thread.h>
#ifdef __MINGW32__
#undef main
#endif
int main (int argc, char **argv)
{
printf ("Kishore\n");
if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER))
{
fprintf (stderr, "SDL: could not able to initialize SDL : %s", SDL_GetError());
exit (1);
}
}
我遗漏了什么。Windows命令行程序使用
main
入口点,并将stdout
和stderr
文件句柄(通过printf语句)输出到控制台窗口。Windows GUI程序使用WinMain
入口点,并且没有设置stdout
和stderr
文件句柄以转到控制台窗口(因为它们没有初始化要输出到的控制台窗口),这就是为什么您看不到printf
语句的输出
POSIX(Linux/Solaris/BSD/…)为控制台和GUI应用程序使用main
入口点,并正确设置stdout
和stderr
,使其显示在终端/控制台窗口中
SDL是一种简化图形程序的跨平台API,因此在Windows上它使用了WinMain
入口点,因此它可以创建一个显示图形的窗口,而不会在其后面出现控制台窗口。SDLsWinMain
调用main
函数,以便您可以在所有平台上使用main
入口点
过去,我发现:
test.exe | cat
要工作,但是YMMV。您写入的所有内容
stdout
和stderr
都将分别重定向到exe所在的文件stdout.txt
和stderr.txt
为了避免这种重定向行为,您必须在调用SDL_Init之后包含以下两行代码
freopen( "CON", "w", stdout );
freopen( "CON", "w", stderr );
如果这不起作用,您可以检查,还有更多说明。如果甚至不打印字符串
“Kishore\n”
?如果您删除If
语句,并且只有printf
,那么它能工作吗?您的代码在我的系统上,没有任何修改,工作正常。它以“Kishore”开头并无错误地退出。注意:链接的一般规则:如果A
使用B
中的符号,B
应位于A
之后。在您的情况下,由于使用了libSDL.a
中的符号,因此应该在test.c
之后编写-lSDL
。我不知道为什么gcc在您的示例中没有抱怨,但迟早您会遇到这个问题。@Joachim-没有任何SDL函数调用,它工作得非常好。@Shahbaz-我甚至尝试按照您的建议编译,但仍然看不到输出。
freopen( "CON", "w", stdout );
freopen( "CON", "w", stderr );