SORU
14 NİSAN 2009, Salı


C bir Yapı olarak varsayılan değerler

Böyle bir veri yapısı var:

    struct foo {
        int id;
        int route;
        int backup_route;
        int current_route;
    }

ve bir fonksiyonu update() bu değişiklikleri talep etmek için kullanılır.

  update(42, dont_care, dont_care, new_route);

bu çok uzun ve eğer bu yapı için bir şeyler eklersem bir ekleme var '' güncellemek için HER çağrı için( ... ). dont_care

Bu bir yapı yerine geçen ama dont_care 'önceden sadece işlev çağrısında yazım bile daha sıkıcı bir iştir. ile yapı doldurarak düşünüyorum Bu yapı bir yere önemser varsayılan değerler oluşturmak ve bu alanları ben yerel bir değişken olarak ilan ediyorum sonra nasıl bakabilirim?

    struct foo bar = { .id = 42, .current_route = new_route };
    update(&bar);

Update fonksiyonu ifade etmek istiyorum sadece bilgi aktarmak için en zarif yolu nedir?

ve her şey -1 varsayılan yapmak istiyorum (gizli kodu 'dont care')

CEVAP
14 NİSAN 2009, Salı


Süre makro ve/veya işlevler olarak zaten önerilen) çalışma (ve belki diğer olumlu etkileri (örneğin, hata ayıklama kanca)) onlar daha karmaşık daha gerekli; en basit ve muhtemelen en zarif çözüm için sadece define bir sabit kullanmak için değişken hazırlama:

const struct foo FOO_DONT_CARE = { // or maybe FOO_DEFAULT or something
    dont_care, dont_care, dont_care, dont_care
};
...
struct foo bar = FOO_DONT_CARE;
bar.id = 42;
bar.current_route = new_route;
update(&bar);

Bu kod hemen hemen yönlendirme anlayış zihinsel havai ve barda açık bir küme ise (güvenli bir şekilde) ayarlamak diğerlerini görmezden ne çok açıktır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KIT KAT

    KIT KAT

    3 EKİM 2005
  • Makeup Lover

    Makeup Lover

    12 HAZİRAN 2011
  • SHAYTARDS

    SHAYTARDS

    1 EKİM 2008