SORU
18 EYLÜL 2008, PERŞEMBE


{0} C ne Anlama Geliyor ?

Ne zaman {0} nesneyi başlatmak için kullanılır. C ne anlama geliyor? Tüm başvuruları {0} hiçbir yerde bulamıyorum, ve kıvırcık parantez yüzünden Google aramaları yararlı değildir.

Örnek kod:

SHELLEXECUTEINFO sexi = {0};
sexi.cbSize = sizeof(SHELLEXECUTEINFO);
sexi.hwnd = NULL;
sexi.fMask = SEE_MASK_NOCLOSEPROCESS;
sexi.lpFile = lpFile.c_str();
sexi.lpParameters = args;
sexi.nShow = nShow;

if(ShellExecuteEx(&sexi))
{
    DWORD wait = WaitForSingleObject(sexi.hProcess, INFINITE);
    if(wait == WAIT_OBJECT_0)
        GetExitCodeProcess(sexi.hProcess, &returnCode);
}

O olmadan, yukarıdaki kod çalışma zamanı kaza olacak....

Teşekkürler.

CEVAP
18 EYLÜL 2008, PERŞEMBE


Burada ne denirtoplamabaşlatma. Burada (kısaltılmış) ISO spec bölüm 8.5.1 bir toplama tanımı:

Toplama bir dizi ya da kullanıcı-ilan kurucular veya statik olmayan hiçbir özel korumalı veri üyeleri, temel sınıflar, sanal fonksiyonları ile bir sınıf.

Şimdi, kullanarak {0} böyle bir toplama başlatmak için temel olarak 0 numara tüm şey. Bu toplu başlatma kullanırken çünkütüm üyelerin belirtmek zorunda değilsinve spec belirtilmemiş tüm üyeleri basit türleri için ayarlamak için 0 anlamına gelir varsayılan başlatılması gerekir.

İşte spec ilgili bir alıntı:

Eğer Üye var daha listede daha az başlatıcılar ise orada toplama, sonra her bir üyesi değil açıkça başlatılması olacaktır varsayılan başlatıldı. Örnek:

struct S { int a; char* b; int c; };
S ss = { 1, "asdf" };

başlatır ss.1, ss.b "", ss.asdf c değeri ile form int ifadesi(), 0.

Bu konu burada tam spec bulabilirsiniz:

http://www.kuzbass.ru:8086/docs/isocpp/decl.html#dcl.init.aggr

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Lupe Fiasco

    Lupe Fiasco

    23 ŞUBAT 2006
  • martin shervington

    martin sherv

    7 EKİM 2011
  • steven johns

    steven johns

    11 Mart 2011