_tmainC ++ में मौजूद नहीं है। 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 वर्णों को \0ASCII मान के बाद बाइट्स की जोड़ी के रूप में दर्शाया जाता है ।
और चूंकि 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 द्वारा परिभाषित किया गया है।