windows下編程有兩種基本的程序:窗口程序和控制臺(tái)程序。它們的代碼入口分別是WinMain函數(shù)和main函數(shù)。但這個(gè)區(qū)別不是本質(zhì)的,代碼稍加改動(dòng)main也能啟動(dòng)窗口程序。窗口程序和控制臺(tái)程序的區(qū)別在于程序啟動(dòng)時(shí),系統(tǒng)是否會(huì)啟動(dòng)一個(gè)控制臺(tái)。這個(gè)區(qū)別在于連接時(shí)使用了不同的命令參數(shù)。
對(duì)于vc來(lái)說(shuō):
窗口程序:/SUBSYSTEM:WINDOWS
控制臺(tái)程序:/SUBSYSTEM:CONSOLE
對(duì)于gcc(Dev-Cpp)來(lái)說(shuō):
窗口程序:-mwindows
控制臺(tái)程序:-mconsole
如果參數(shù)不對(duì),則會(huì)出現(xiàn)一些不想要的結(jié)果。如果控制臺(tái)程序參數(shù)不對(duì),則看不到任何信息輸出,因?yàn)闆](méi)有控制臺(tái)來(lái)顯示這些信息。如果窗口程序使用了/SUBSYSTEM:CONSOLE(VC)或-mconsole(gcc)則會(huì)在窗口程序外多出一個(gè)控制臺(tái)。
但對(duì)這些特性加以利用怎會(huì)幫助我們編程,我們可以在窗口程序中加入控制臺(tái),跟蹤顯示程序運(yùn)行狀態(tài)。下面是一個(gè)非常簡(jiǎn)單的例子,只需幾行代碼就可以達(dá)到想要的效果(這是針對(duì)vc的例子,gcc需稍加改造)。
/* 文件名:console_trace.h */
/* 作用:在窗口程序中加入控制臺(tái),便于跟蹤信息 */
#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的使用方法一樣。運(yùn)行時(shí)就能在控制臺(tái)看到輸出的信息。