windows下编程有两种基本的程序:窗口程序和控制台程序。它们的代码入口分别是WinMain函数和main函数。但这个区别不是本质的,代码稍加改动main也能启动窗口程序。窗口程序和控制台程序的区别在于程序启动时,系统是否会启动一个控制台。这个区别在于连接时使用了不同的命令参数。
对于vc来说:
窗口程序:/SUBSYSTEM:WINDOWS
控制台程序:/SUBSYSTEM:CONSOLE
对于gcc(Dev-Cpp)来说:
窗口程序:-mwindows
控制台程序:-mconsole
如果参数不对,则会出现一些不想要的结果。如果控制台程序参数不对,则看不到任何信息输出,因为没有控制台来显示这些信息。如果窗口程序使用了/SUBSYSTEM:CONSOLE(VC)或-mconsole(gcc)则会在窗口程序外多出一个控制台。
但对这些特性加以利用怎会帮助我们编程,我们可以在窗口程序中加入控制台,跟踪显示程序运行状态。下面是一个非常简单的例子,只需几行代码就可以达到想要的效果(这是针对vc的例子,gcc需稍加改造)。
/* 文件名:console_trace.h */
/* 作用:在窗口程序中加入控制台,便于跟踪信息 */
#ifndef CONSOLE_TRACE_H
#define CONSOLE_TRACE_H
#define CONSOLE_TRACE
#ifdef CONSOLE_TRACE
#pragma comment(linker, "/SUBSYSTEM:CONSOLE")
#define console_trace printf
#else
#define console_trace
#endif /* CONSOLE_TRACE */
#endif /* CONSOLE_TRACE_H */
在你的代码里加入console_trace.h头文件,就可以使用console_trace,跟prinf的使用方法一样。运行时就能在控制台看到输出的信息。