_tmain
C ++ में मौजूद नहीं है। main
कर देता है।
_tmain
एक Microsoft एक्सटेंशन है।
main
सी ++ मानक के अनुसार, कार्यक्रम का प्रवेश बिंदु है। इसके इन दो हस्ताक्षरों में से एक है:
int main();
int main(int argc, char* argv[]);
Microsoft ने एक wmain जोड़ा है जो इसके साथ दूसरा हस्ताक्षर बदलता है:
int wmain(int argc, wchar_t* argv[]);
और फिर, यूनिकोड (UTF-16) और उनके मल्टीबाइट कैरेक्टर सेट के बीच स्विच करना आसान बनाने के लिए, उन्होंने परिभाषित _tmain
किया है, यदि यूनिकोड सक्षम है, तो इसे wmain
और अन्यथा संकलित किया जाता है main
।
आपके प्रश्न के दूसरे भाग के रूप में, पहेली का पहला भाग यह है कि आपका मुख्य कार्य गलत है। wmain
एक wchar_t
तर्क लेना चाहिए , नहीं char
। चूंकि कंपाइलर main
फ़ंक्शन के लिए इसे लागू नहीं करता है , तो आपको एक ऐसा प्रोग्राम मिलता है, जहां फ़ंक्शन के wchar_t
लिए स्ट्रिंग की एक सरणी दी जाती main
है, जो उन्हें char
स्ट्रिंग्स के रूप में व्याख्या करता है ।
अब, यूटीएफ -16 में, यूनिकोड सक्षम होने पर विंडोज द्वारा उपयोग किया जाने वाला वर्ण, सभी ASCII वर्णों को \0
ASCII मान के बाद बाइट्स की जोड़ी के रूप में दर्शाया जाता है ।
और चूंकि x86 CPU थोड़ा-सा एंडियन है, इसलिए इन बाइट्स का क्रम स्वैप किया जाता है, ताकि ASCII मान पहले आए, उसके बाद एक अशक्त बाइट।
और एक स्ट्रिंग स्ट्रिंग में, स्ट्रिंग को आमतौर पर कैसे समाप्त किया जाता है? हां, एक शून्य बाइट द्वारा। तो आपका कार्यक्रम स्ट्रिंग्स का एक गुच्छा देखता है, हर एक बाइट लंबी।
सामान्य तौर पर, विंडोज प्रोग्रामिंग करते समय आपके पास तीन विकल्प होते हैं:
- स्पष्ट रूप से यूनिकोड का उपयोग करें (wmain को कॉल करें, और हर विंडोज एपीआई फ़ंक्शन के लिए जो चार-संबंधित तर्क लेता है,
-W
फ़ंक्शन के संस्करण को कॉल करता है। CreateWindow के बजाय, CreateWindowW को कॉल करें)। और उपयोग करने के बजाए char
उपयोग wchar_t
, और इतने पर
- स्पष्ट रूप से यूनिकोड को अक्षम करें। मुख्य कॉल करें, और CreateWindowA, और
char
स्ट्रिंग्स के लिए उपयोग करें ।
- दोनों को अनुमति दें। (कॉल _tmain, और CreateWindow, जो मुख्य / _tmain और CreateWindowA / CreateWindowW को हल करते हैं), और char / wchar_t के बजाय TCHAR का उपयोग करें।
यह विंडोज़ .h द्वारा परिभाषित स्ट्रिंग प्रकारों पर लागू होता है: LPCTSTR, LPCSTR या LPCWSTR में से किसी एक के लिए हल होता है, और हर दूसरे प्रकार के लिए जिसमें char या wchar_t शामिल होता है, एक -T- संस्करण हमेशा मौजूद होता है जिसका उपयोग किया जा सकता है।
ध्यान दें कि यह सब Microsoft विशिष्ट है। TCHAR एक मानक C ++ प्रकार नहीं है, यह विंडोज़ में परिभाषित एक मैक्रो है। wmain और _tmain को भी केवल Microsoft द्वारा परिभाषित किया गया है।