C'de paylaşılan genel değişkenler


82

C'de paylaşılan global değişkenleri nasıl oluşturabilirim? Bunu bir başlık dosyasına koyarsam, bağlayıcı değişkenlerin önceden tanımlanmış olduğundan şikayet eder. Değişkeni C dosyalarımdan birinde bildirmenin ve externonu kullanmak isteyen diğer tüm C dosyalarının üstüne manuel olarak s yerleştirmenin tek yolu bu mu? Bu ideal değil.


Kendi kaynak kodunuzla mı paylaşıyorsunuz? Extern bildirimini bir başlık dosyasına ve tanımı başka (tek) kaynağa koyun. Bunlar elbette süreç dizileriniz arasında paylaşılır. Süreçler arası veri paylaşımı için IPC mekanizmalarını (paylaşılan bellek, borular) kullanın.
Hernán



Yanıtlar:


64

Başlık dosyasında ile yazın extern. Ve genel kapsamda c dosyalarından biri bunu olmadan bildirir extern.


1
Bunun yerine * .c dosyasının başlık dosyasında beyan edebilir miyiz?
Geremia

91

Bir başlık dosyasında (shared.h):

Bu global sembolü kullanmak istediğiniz her dosyaya, extern bildirimini içeren başlık ekleyin:

Birden fazla bağlayıcı tanımından kaçınmak için, derleme birimlerinizde global sembolünüzün yalnızca bir bildirimi bulunmalıdır (örneğin: shared.cpp):


IPC mekanizmaları hakkında daha fazla bilgi edinmek için tercih ettiğiniz referanslarınız var mı?
NickO

7
Lütfen "küresel sembolünüzün sadece bir beyanı ..." üzerine daha fazla vurgu yapın. Global değişkenleri kullanmak istediğim tüm c dosyalarında bildirim vardı :(
AntonioCS

22

Başlık dosyasında

başlık dosyası

Globalin yaşamasını istediğiniz dosyanın bulunduğu dosyada:

Extern sürüme ihtiyaç duyan diğer dosyalarda:


ah bu bir süre önce sahip olduğum çözüm - MAIN_FILE önişlemci değişkenini unuttum. i thinik kabul edilen cevabı daha çok seviyorum tho
Claudiu

15

Bildirimi bir başlık dosyasına koyarsınız, örn.

.C dosyalarınızdan birinde, onu genel kapsamda tanımlarsınız.

Erişmek istediği her .c dosyası my_globalile başlık dosyalarını externin.


5

C ve C ++ arasında kod paylaşıyorsanız, aşağıdakileri shared.hdosyaya eklemeyi unutmayın :


2

Tek bir başlık dosyasıyla daha temiz bir yol vardır, bu nedenle bakımı daha kolaydır. Global değişkenlerin bulunduğu başlıkta, her bildirime bir anahtar kelime (ortak kullanıyorum) ön eki sonra sadece bir kaynak dosyaya şunu ekleyin

ve bunun gibi diğer kaynak dosyalar

Globals.h dosyasındaki hiçbir değişkeni başlatmadığınızdan emin olun, aksi takdirde bağlayıcı, extern anahtar sözcüğü ile bile başlatılmış bir değişken harici olarak değerlendirilmediğinden şikayet etmeye devam edecektir. Global.h dosyası buna benzer

herhangi bir beyan türü için işe yarıyor gibi görünüyor. Elbette #define'da ortak anahtar kelimeyi kullanmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.