SORU
11 HAZİRAN 2010, Cuma


Hata "başlatıcı öğe değişkeni başlatmak için çalışırken sürekli" sabit ile

Line 6 (foo_init başlatılamıyor my_foo) aşağıdaki programın bir hata olsun ve neden anladığımdan emin değilim.

typedef struct foo_t {
    int a, b, c;
} foo_t;

const foo_t foo_init = { 1, 2, 3 };
foo_t my_foo = foo_init;

int main()
{
    return 0;
}

Unutmayın bu iş üzerinde çalışıyorum, çok dosyadan oluşan büyük bir proje daha basit bir versiyonu. Amaç birden fazla dosya bir devlet yapısının başlatmak için kullanabileceği bir tek sabit olması için nesne dosyası. Sınırlı kaynaklar ile gömülü bir hedef var ve bu yapı küçük değil, kaynak birden çok kopyasını istemiyorum. Kullanmamayı tercih ederim:

#define foo_init { 1, 2, 3 }

Aynı zamanda taşınabilir kod yazmak için çalışıyorum, geçerli C89 veya C99 bir çözüme ihtiyacım var.

Bu, bir nesne dosyası bu Düzenlemeler ile bir ilgisi var mı? Bu değişkenler bir ORG girip ikinci bir ORG içeriğini kopyalayarak başlatıldı başlatıldı?

Belki de sadece benim taktik değiştirmek ve başlatma işlevi başlangıçta kopyalarını yapmak gerekiyor. Orada başka fikirleri yoksa?

CEVAP
11 HAZİRAN 2010, Cuma


C statik depolama süresi ile dil nesneleri ile başlatılması gerekiyorsabit ifadeveya toplama başlatıcılar sabit ifadeler içeren.

Bir "" hiç nesne, nesnenin const olarak bildirilirse bile C. sabit bir ifadedir büyük

Ayrıca, C dili "sabit" anlamına gelir . terim ^em>değişmez sabitler(*, , * 'a'0xFF7 ve benzerleri gibi) ve numaralandırma üyeleri. Sabit nitelikli nesneleri (herhangi bir tür)sabitlerC dili terminolojisi. Statik depolama süresi ile birlikte nesne başlatıcılar, kendi türünden bağımsız olarak kullanılamaz.

Örneğin, buDEĞİLbir sabit

const int N = 5; /* `N` is not a constant in C */

N yukarıdaki sabit bir C olacak , ama eğer yapmaya çalışırsanız C. sürekli Öyle değil

static int j = N; /* ERROR */

aynı hatayı alırsınız: sabit olmayan. bir statik bir nesneyi başlatmak için bir girişim

Bu C dilinde çoğunlukla #define adlandırılmış sabitler bildirmek için kullanın ve aynı zamanda #define adlı toplama başlatıcı oluşturmak için çare nedeni de budur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Feel The Electricity!

    Feel The Ele

    20 ŞUBAT 2010
  • megablueblaster

    megablueblas

    23 HAZİRAN 2006
  • TitaniumBackup

    TitaniumBack

    10 EYLÜL 2011