SORU
21 Mayıs 2009, PERŞEMBE


_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
22 Mayıs 2009, Cuma


_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 yerine char 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Outler

    Adam Outler

    19 EKİM 2006
  • Dylan Brenan

    Dylan Brenan

    22 Aralık 2009
  • Philip DeFranco

    Philip DeFra

    16 EYLÜL 2006