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
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'
0xFF
7 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.
Hata alıyorum: PostgreSQL raylar için ...
&; mesaj herhangi bir modülü yüklemek ...
Neden JavaScript ile " başlatmak i...
"kökeni yalnızca HTTP istekleri i...
Nasıl " önlemek için;sıfır böl&; S...