_tmain arasındaki fark nedir() ve main() C ?
Eğer şu ana C başvurumu çalıştırın() yöntemi, her şey TAMAM
int main(int argc, char *argv[])
{
cout << "There are " << argc << " arguments:" << endl;
// Loop through each argument and print its number and value
for (int i=0; i<argc; i )
cout << i << " " << argv[i] << endl;
return 0;
}
Ne beklediğimi ben ve fikirlerim dışında yazdırılır.
Eğer _tmain kullanırsam ancak:
int _tmain(int argc, char *argv[])
{
cout << "There are " << argc << " arguments:" << endl;
// Loop through each argument and print its number and value
for (int i=0; i<argc; i )
cout << i << " " << argv[i] << endl;
return 0;
}
Sadece her argümanın ilk karakteri görüntüler.
Farkı ne bu neden oluyor?
CEVAP
_tmain
C yok . main
yapar.
_tmain
Microsoft uzantısıdır.
main
, C standardı, programın giriş noktası göre.
Bu iki imza var:
int main();
int main(int argc, char* argv[]);
Microsoft bu: ikinci imza yerine geçen bir wmain ekledi
int wmain(int argc, wchar_t* argv[]);
Ve sonra, yapmak daha kolay arasında geçiş yapmak için Unicode (UTF-16) ve belge karakter kümesi olmuşlar tanımlı _tmain
eÄŸer Unicode etkindir derlenmiÅŸ olarak wmain
ve aksi gibi main
.
Sorunuzun ikinci kısmına gelince, bulmacanın ilk bölümünde ana işlevi yanlış. wmain
wchar_t
deÄŸiÅŸken, char
almalıdır. Beri derleyici değil zorlamak bunun için main
iÅŸlevi, bir program, bir dizi wchar_t
dizeleri geçirilen main
iÅŸlevi, hangi yorumlar onlar gibi char
dizeleri.
Şimdi, UTF-16 karakter kümesi Unicode etkinleştirildiğinde, Windows tarafından kullanılan tüm ASCII karakter bayt \0
ASCII değerini ve ardından bir çift olarak gösterilir.
Ve x 86 İŞLEMCİ little endian olduğu için, bu bayt sırası ASCII değeri ilk, o zaman bir null bayt tarafından takip geliyor ki takas.
Ve char dizesi, nasıl dize genellikle sona erer? Evet, bir null bayt tarafından. Programınızı dizeleri bir grup görür, her biri uzun bayt.
Genel olarak, Windows programlama yaparken üç seçeneğiniz vardır:
- Açıkça kullanmak Unicode (arama wmain ve her Windows char ile ilgili tartışmalar sürer, işlevi
-W
sürümünü arayın. API işlevi için , CreateWindowW Kuyruk Ara) yerine. Ve yerinechar
wchar_t
ve benzeri kullanın - Açıkça devre dışı Unicode. Ana ve CreateWindowA arama ve dizeleri
char
kullanın. - Hem izin ver. (çağrı _tmain ve/_tmain ve CreateWindowA/CreateWindowW ana çözümlemek Kuyruk, ve TCHAR kullanmak yerine/wchar_t char.
Aynı dize türleri windows tarafından tanımlanan için geçerlidir.h: LPCTSTR veya LPCWSTR ya, ya da wchar_t, a-T - char sürümünü içeren her tür için LPCTSTR çözümler her zaman yerine kullanılabilir var.
Bu tüm Microsoft özel olduğunu unutmayın. TCHAR standart C türü değil, bir windows makro olarak tanımlanır.h. wmain ve _tmain da Microsoft tarafından tanımlanır.
Bir URI, URL ve URN arasındaki fark ne...
Aramak ve uygulamak arasındaki fark ne...
@Staticmethod ve @Python classmethod a...
Match_parent ve fill_parent arasındaki...
Varchar ve nvarchar arasındaki fark ne...