用過C的人都知道每一個C的程序都會有一個main(),但有時看別人寫的程序發現主函數不是int main(),而是int _tmain(),而且頭文件也不是<iostream.h>而是<stdafx.h>,會困惑吧?
一起來看看他們有什麼關系吧
首先,這個_tmain()是為了支持unicode所使用的main一個別名而已,既然是別名,應該有宏定義過的,在哪裡定義的呢?就在那個讓你困惑的<stdafx.h>裡,有這麼兩行
#include <stdio.h>
#include <tchar.h>
我們可以在頭文件<tchar.h>裡找到_tmain的宏定義
#define _tmain main
所以,經過預編譯以後, _tmain就變成main了,這下明白了吧
另外說明:
在網下看到有人問_tmain與main的區別,翻譯得一塌糊塗,我也順便翻譯一下:
用過C言語的人都知道每一個C的程序都會有一個main函數,但有時看別人寫的程序卻出現了_tmain,會感動很困惑。我當時也是很困惑,於是上網找資料看。現在將我得到的結果總結一下。因為並沒有什麼根據,如果有誤。歡迎指正:_tmain與main的區別
[@more@]
1。 main是C程序的函數,_tmain是main為了支持unicode所使用的main的別名
2。 _tmain的定義在<tchar.h>可以找到,如#define _tmain main,所以要加#i nclude <tchar.h>才能用。
3。因此_tmain compile後仍為main,所以都可以執行
另外,wmain也是main的另一個別名,是為了支持二個字節的語言環境
-----------------------
int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
wmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] )
int _tmain(int argc, _TCHAR* argv[])
用_tmain()代替main()有什麼好處?
_tmain()是不是可以在程序用命令行啟動的時候,決定arcv[]字符是ANSY或者UNICODE?
知道的朋友能講講嗎?
支持UNICODE我知道。具體體現在?我用main()WinMain()函數裡使用TCHAR,泛型函數,照樣可以支持源代碼分別編譯ASNY和UNICODE。所以我問_tmain()的區別是不是僅在於程序啟動的時候?
是不是用UNICODE不是在程序啟動的時候決定的,而是在程序編譯的時候看有沒有預處理定義"UNICODE",所以_tmain的作用就和使用TCHAR而非具體的char或w_char一樣,當編譯時定義了UNICODE時,就是wmain當沒定義時就是main,