2013-03-15 8 views
7

Büyük bir ünite üzerinde çalışıyorum, ünite o kadar büyümüş ki, onu 3 birim halinde bölmeye karar verdim. Bu birim adlarının Main, Common ve Objects olduğunu varsayalım. Main birimi, diğer iki birimi de kullanır ve Objects birimi de Common birimini kullanır. Bu koşullara atıfta bulunması gereken 3 ünitede kod vardır.Bir birimde koşullu durumları tanımlayabilir ve bunları başka birimlerde kullanabilir miyim?

Sorun şu ki, bu koşulların tanımlandığı 3 birimden hangisi olursa olsun, diğer 2 birim onları görmez. Bunları kesinlikle 3 biriminde kopyalamak istemiyorum. Bunları aynı zamanda projede tanımlamak istemiyorum çünkü bu birimler birden fazla proje tarafından kullanılacak, bu durumda tüm projelerin şartlı koşulları önemsememesi gerekir.

Bu koşulların, 3 biriminin bunları projede tanımlamaksızın görecekleri şekilde tanımlayabilir miyim?

+3

İçerme dosyası kullanabilirsiniz. – TLama

+0

+1. Bunları proje dosyasına koymanın itirazını anlamıyorum. Eğer oradaysa, birimleri kullanan diğer projeleri etkilemez (birimleri kullanmış oldukları sürece derlenmiş .dcu dosyalarını değil), çünkü proje dosyasındaki tanımlar sadece projeye uygulanır. tanımlar uygulanır. Birimleri kullanan diğer projeler, tanımlarla ilgili hiçbir şey bilmezler ve birimleri hiçbir şey etkilemeden derlerlerdi. Ancak, diğer projeler bir araya getirme dosyasından önce ekli dosyayı değiştirmeyi bilmedikçe bir içerme dosyasına yerleştirilir. –

+0

@Ken, bu projeyi hangi proje kullanıyor olursa olsun, tüm projeler aynı şartlara sahip olmalı ve onlar için endişelenmemelidir. Örneğin, 10 farklı proje muhtemelen aynı kesin koşullara ihtiyaç duyacaktır. Ayrıca, tanımlamam gereken 12 şart var, bu geliştiricilerin varlığını bile bilmemek için bir nedenleri olmadıklarında, son geliştiricinin projede bunlardan 12 tanesini tanımlamasını beklemiyorum. –

cevap

8

Koşullu tanımlamalar için tek seçeneğiniz, bunları daha sonra üç birimde de dahil edeceğiniz bir .inc dosyasına koymaktır. Ancak, koşullu tanımlar ve $IFDEF koşullu derlemeyi elde etmenin tek yolu değildir. Koşullu yerine bir boole sabitini kullanmayı düşünebilirsiniz. Üç birimde de görüldüğü sürece, $IFDEF yerine $IF'u kullanabilirsiniz.

{$IF MyConstant} 
    .... 
{$IFEND} 

Veya XE3 içinde başlayarak, {$ENDIF} ile {$IF} kesebilirler. Koşullu olarak derlemeye çalışılırken ve durumun genel kapsamı olmasını istemediğimde, kişisel olarak bu ikinci yaklaşımı tercih etme eğilimindeyim.

+0

Bunun gibi sesler gerçekten tek çözümdür, teşekkürler! –

+0

"{IF IF MyConstant}" yaklaşımını beğeniyorum. “MyConstant” için ne kullanıyorsunuz? Btw, neden şartların global kapsamı olmasını istemiyorsun? Başka bir deyişle: sadece koşullu derlemeyi kullandığınız şeyle ilgilenmek.Şu anda yazılımımızın eski sürümü için derleyici sürüm uyumluluğunu sağlama dışında tüm yollarda "koşulsuz" durumundayım. –

+0

@MarjanVenema Tipik olarak, performans endişeleri nedeniyle standart bir derlemeyi derlemek için göze alamayacağımız tanılama/hata ayıklama kodu içindir. Bildiğiniz gibi, proje dosyalarına karışmamak güzel ve kaynak kodundaki yerel değişiklikler daha az opaktır. –

İlgili konular