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

  • Break

    Break

    10 Aralık 2005
  • AutoStream's Garage419

    AutoStream's

    15 EKİM 2007
  • xCraash

    xCraash

    6 Temmuz 2012