Yönergeyi dahil et - Include directive

Birçok Programlama dilleri ve diğer bilgisayar dosyalarının bir direktif sık sık aranır Dahil etmek (ara sıra kopya veya ithalat), ikinci bir dosyanın içeriğinin orijinal dosyaya eklenmesine neden olur. Dahil edilen bu dosyalara kopya defterleri veya başlık dosyasıs. Genellikle program verilerinin fiziksel düzenini, prosedürel kod parçalarını ve / veya ileriye dönük beyanlar terfi ederken kapsülleme ve kodun yeniden kullanımı.

Amaç

Dahil etmek direktif izin verir kütüphaneler geliştirilecek kodun aşağıdakilere yardımcı olması:

  • herkesin bir program boyunca bir veri düzeni tanımının veya prosedür kodunun aynı sürümünü kullanmasını sağlamak,
  • Bir sistemde bileşenlerin kullanıldığı yerlerde kolayca çapraz referans,
  • gerektiğinde programları kolayca değiştirin (her bir örneği aynı olacak şekilde değiştirmek yerine yalnızca bir ana dosya düzenlenmelidir veri tipi kullanılır veya işlevi denir) ve
  • Kapsamlı veri düzenlerini kodlamaya gerek kalmadan zamandan tasarruf edin (küçük, ancak yararlı).

Dahil etme yönergesinin kullanımından yararlanan örnek bir durum, farklı bir dosyadaki işlevlere atıfta bulunmaktır. Diyelim ki bir fonksiyonumuz var Ekle tek bir dosyada, daha sonra beyan edilir (bir işlev prototipi ) ve ardından ikinci bir kaynak dosyada aşağıdaki gibi başvurulur:

int Ekle(int, int);int üçlü(int x){    dönüş Ekle(x, Ekle(x, x));}

Bu yöntemin bir dezavantajı, prototipin işlevi kullanan tüm dosyalarda bulunması gerektiğidir. Diğer bir dezavantaj, işlevin dönüş türü veya bağımsız değişkenleri değiştirilirse, bu prototiplerin güncellenmesi gerekecek olmasıdır. Prototipi tek ve ayrı bir dosyaya koymak bu sorunları önler. Prototipin dosyaya taşındığını varsayarsak add.h, ikinci kaynak dosya şu hale gelebilir:

#Dahil etmek "add.h"int üçlü(int x){    dönüş Ekle(x, Ekle(x,x));}

Şimdi, kod her derlendiğinde, en son işlev prototipleri add.h bunları kullanan dosyalara dahil edilecek ve olası yıkıcı hatalardan kaçınılacaktır.

Dil desteği

C / C ++

İçinde C ve C ++, #Dahil etmek Önişlemci direktifi neden olur derleyici bu satırı, adlandırılmış kaynak dosyanın içeriğinin tüm metni ile değiştirmek için (tırnak işaretleri arasında: "" varsa) veya adlandırılmış üstbilgi (açılı ayraçlar içinde: <>);[1] bir başlığın kaynak dosya olması gerekmediğini unutmayın.[2] Dahil etme, uygulama tanımlı bir yuvalama sınırına kadar bu dahil edilen içeriklerde yinelemeli olarak devam eder. Başlıkların dosyalara karşılık gelen adlara sahip olması gerekmez: C ++ 'da standart başlıklar genellikle "vektör" gibi sözcüklerle tanımlanır, bu nedenle #include C'de standart başlıklar ".h" uzantılı dosya adları biçiminde tanımlayıcılara sahipken, #include . Bir "kaynak dosya", herhangi bir biçimde adı olan herhangi bir dosya olabilir, ancak en çok ".h" uzantısıyla adlandırılır ve C ++ 'yı ayırt etmek için "başlık dosyası" (bazen ".hpp" veya ".hh") olarak adlandırılır. başlıkları), ancak .c, .cc ve .cpp uzantılı dosyalar da dahil edilebilir (özellikle Tek Derleme Birimi tekniği) ve bazen başka uzantılar kullanılır.

Bu iki biçim #Dahil etmek yönerge, uygulama tanımlı bir şekilde hangi başlığın veya kaynak dosyanın dahil edileceğini belirleyebilir. Pratikte, genellikle yapılan şey, köşeli parantezlerin aramaları oluşturmasıdır. kaynak dosyaları standart bir sistem dizininde (veya dizinler kümesinde) ve ardından yerel veya projeye özgü yollarda (komut satırında, ortam değişkeninde veya bir Makefile veya diğer yapı dosyası), tırnak işaretli form standart bir sistem dizininde arama yapmaz, yalnızca yerel veya projeye özgü yollarda arama yapar.[3] Çakışma olmaması durumunda, açılı parantez formu projeye özgü kapsamları belirtmek için de kullanılabilir, ancak bu zayıf form olarak kabul edilir. Başlıkların dosyalara karşılık gelmesi gerekmediği gerçeği, öncelikle bir uygulama tekniğidir ve C ++ standart başlıklarını dahil ederken .h uzantısını atlamak için kullanılır; ortak kullanımda "başlık", "başlık dosyası" anlamına gelir.

Örneğin:

#Dahil etmek  // Standart 'stdio.h' başlığının içeriğini ekleyin (muhtemelen bir 'stdio.h' dosyası).#Dahil etmek  // Standart 'vektör' üstbilgisinin içeriğini ekleyin (muhtemelen bir 'vector.h' dosyası).#Dahil etmek "user_defined.h" // 'user_defined.h' dosyasının içeriğini ekleyin.

C ve C ++ 'da, iki (veya daha fazla) dosya içeriyorsa, her ikisi de sırayla aynı üçüncü dosyayı içeriyorsa sorunlarla karşılaşılabilir. Çözümlerden biri, dosyaların başka dosyaları dahil etmesini önlemektir, muhtemelen programcının orijinal dosyaya manuel olarak fazladan dahil etme yönergeleri eklemesini gerektirir. Başka bir çözüm kullanmaktır korumaları dahil et.[4]

COBOL

COBOL (ve ayrıca RPG IV ) programcıların kopya kitaplarını programın kaynağına başlık dosyalarına benzer bir şekilde kopyalamasına izin verir, ancak aynı zamanda içlerindeki belirli metinleri başka metinlerle değiştirmeye de izin verir. Dahil edilecek COBOL anahtar kelimesi KOPYALAve değiştirme işlemi kullanılarak yapılır. DEĞİŞTİRİLİYOR ... TARAFINDAN ... fıkra. COBOL'de COBOL 60'tan beri bir dahil etme yönergesi mevcut, ancak orijinalinden değiştirildi DAHİL ETMEK[5] -e KOPYALA 1968'e kadar.[6]

Fortran

Fortran başlık dosyası gerektirmez aslında. Ancak, Fortran 90 ve sonraki sürümlerinde birbiriyle ilişkili iki özellik vardır: Dahil etmek ifadeler ve modüller. İlki, bir C başlığına çok benzeyen, prosedür arayüzlerini içeren ortak bir dosyayı paylaşmak için kullanılabilir, ancak bir arayüzün spesifikasyonu tüm Fortran prosedür çeşitleri için gerekli değildir. Bu yaklaşım yaygın olarak kullanılmamaktadır; bunun yerine prosedürler genellikle daha sonra bir kullanım diğer kod bölgelerindeki ifade. Modüller için, başlık tipi arabirim bilgileri derleyici tarafından otomatik olarak oluşturulur ve tipik olarak ayrı modül dosyalarına konur, ancak bazı derleyiciler bu bilgileri doğrudan nesne dosyalarına yerleştirmiştir. Modül prosedürü arayüzleri neredeyse evrensel olarak bu şekilde yayılsa da, dil belirtiminin kendisi herhangi bir ekstra dosyanın oluşturulmasını zorunlu kılmaz.

PHP

İçinde PHP, Dahil etmek yönergesi başka bir PHP dosyasının eklenmesine ve değerlendirilmesine neden olur.[7] Benzer komutlar gerek, dahil edilmediğinde bir Ölümcül istisna ve senaryoyu durdur,[8] ve include_once ve need_onceBu, bir dosyanın dahil edilmemesine veya daha önce dahil edilmiş veya gerekli olması durumunda yeniden gerekli olmamasına neden olarak C'nin çift dahil etme sorununu ortadan kaldırır.

Diğer diller

Dahil etme direktifinin birçok biçimi vardır, örneğin:

  • #Dahil etmek ... (C )
  • Dahil etmek ... (Fortran, MASM )
  • <!--#include ... --> (HTML SGK )
  • içe aktar ...; (Java )
  • dan ithal ... (JavaScript )
  • var ... = gerekli ("...") (JavaScript)
  • <%@ include ... %> (JSP )
  • {$ I ...} (UCSD Pascal, Turbo Pascal )
  • %Dahil etmek ... (PL / I )
  • içe aktar ... (Python )
  • / KOPYALA QCPYLESRC,QBC (RPG IV - ilk argüman dosya adıdır, ikinci argüman kopya kitabıdır)
  • dış kasa ...; (Pas, paslanma )

Modern diller (ör. Haskell ve Java ) kopyalardan veya içeriklerden kaçınma eğilimindedir, tercih ederek modüller ve ithalat / ihracat sistemleri ad alanı kontrol. Bu dillerden bazıları (Java ve C # ) ileriye dönük bildirimler kullanmayın ve bunun yerine tanımlayıcılar kaynak dosyaları ve doğrudan şuradan okuyun dinamik kitaplık semboller (tipik olarak ithalat veya kullanma yönergeler), yani başlık dosyalarına gerek yoktur.

Ayrıca bakınız

Referanslar

  1. ^ C11 standardı, 6.10.2 Kaynak dosya dahil etme, s. 164–165
  2. ^ C11 standardı, 7.1.2 Standart başlıklar, s. 181, dipnot 182: "Bir üstbilgi mutlaka bir kaynak dosya değildir, ne de < ve > başlık adlarındaki sınırlandırılmış diziler mutlaka geçerli kaynak dosya adlarıdır.
  3. ^ Stallman, Richard M. (Temmuz 1992). "C Ön İşlemcisi" (PDF). Arşivlenen orijinal (PDF) 4 Eylül 2012 tarihinde. Alındı 19 Şubat 2014.
  4. ^ Pike, Rob (21 Şub 1989), C'de programlama hakkında notlar, Cat-v belge arşivi, alındı 9 Aralık 2011
  5. ^ "Ortak İş Odaklı Dil için COBOL İlk Özellikleri" (PDF). savunma Bakanlığı. Nisan 1960. s. IX-9. Arşivlenen orijinal (PDF) 12 Şubat 2014. Alındı 11 Şubat 2014.
  6. ^ "KOPYALAMA İfadesi". CODASYL COBOL Geliştirme Dergisi 1968. Temmuz 1969. LCCN  73601243.
  7. ^ "Dahil etmek". php.net. PHP Grubu. Alındı 20 Şubat 2014.
  8. ^ "gerekli". php.net. PHP Grubu. Alındı 20 Şubat 2014.

Dış bağlantılar