Neden bir başlık dosyası yazmamız gerekiyor?


12

Snarky yorumlarınızı kırmadan önce, biliyorum - bu nooby bir soru. İlk kez C tabanlı bir dil kullanıyorum.

Mobil geliştirme üzerine bir bilgisayar bilimi dersi için Hedef C öğrenen lisans öğrencisi. Akademik bir ortamda, daha küçük projeler inşa ettiğinizden, daha küçük ekiplerde çalıştığınızdan, vb.

Ancak profesörümüz her .m uygulama dosyası için .h başlık dosyalarını talep ediyor ve XCode'u destekliyor. Bana göre bu biraz yoğun bir iş gibi görünüyor. Her yöntem imza ve örnek değişkeni diğer dosyaya kopyalamak emin olmak zorunda. Bir dosyayı değiştirirsem, diğer dosyayla tutarlı olduğundan emin olmalıyım. Öyle görünüyor ki, sadece bir grup küçük can sıkıntısı.

Ama olmalı biliyorum bazı başlık dosyaları için gerçek dünya kullanılması. Harika bir cevap her ikisini de ele alacaktır:

  1. Bir uygulama dosyasının uygun olmadığı için başlık dosyası nedir? Amacı nedir?
  2. Programcılar olarak neden başlık dosyalarımızı manuel olarak yazmak zorundayız? Kolayca otomatik olarak oluşturulabilecek gibi görünüyor.

Şimdiden teşekkürler!


Üstbilgideki bir imzayı değiştirirseniz otomatik olarak uygulamaya geçirilir (ve tersi), XCode otomatik yeniden düzenleme işlemini destekliyor mu? Ya da belki bunu destekleyen bir eklenti var mı? Elle yapmanın bir acı olduğunu biliyorum.
SinirliWithFormsDesigner

Başlık dosyalarını öğrendiğimde ilk tepkim "bunu otomatik olarak yapmanın bir yolu olmalı" idi. Buna yardımcı olacak bir araç aramaya çalıştığımda oldukça şaşkındım ve harika, açık seçimler bulamadım.
Hartley Brody

Böyle bir işlevin bulunmamasına şaşırdım. Eclipse Java için böyle bir yeniden düzenleme yapabilir biliyorum, C / C ++ eklentileri başlık / impl yeniden düzenleme yapabilir eğer bilmiyorum. Sanırım XCode için böyle bir araç yoksa, gelişmeye değer bir şey olabilir. ;)
SinirliWithFormsDesigner

Yanıtlar:


9
  1. Kısacası;

    • Başlık dosyası bir modülün API'sını tanımlar. Üçüncü bir tarafın hangi yöntemleri arayabileceği bir sözleşme listesidir. Modül, üçüncü taraflara bir kara kutu olarak düşünülebilir.

    • Uygulama modülü uygular. Kara kutunun içi. Bir modülün geliştiricisi olarak bunu yazmanız gerekir, ancak üçüncü taraf bir modülün kullanıcısı olarak uygulama hakkında hiçbir şey bilmenize gerek yoktur. Başlık, ihtiyacınız olan tüm bilgileri içermelidir.

  2. Başlık dosyasının bazı bölümleri otomatik olarak oluşturulabilir - yöntem bildirimleri. Bu, uygulamada API'nın bir parçasını oluşturmayan ve başlığa ait olmayan özel yöntemler olması muhtemel olduğundan uygulamaya açıklama eklemenizi gerektirir.

Başlık dosyalarında bazen başka bilgiler de olabilir; tip tanımları, sabit tanımlar vb. Bunlar, uygulamada değil, başlık dosyasında yer alır.


Ancak ne zaman birisi kodumu kullanması gereken, ancak yalnızca .h dosyasına erişimi olan bir durumda olurdu? Çalıştırmak için hala .m'ye ihtiyaç duymazlar mı?
Hartley Brody

1
Uygulama ayrıntılarını değiştirirseniz soyutlama ihtiyacını teorik düzeyde anlıyorum, ancak böyle bir durumun ne zaman ortaya çıkacağından emin değilim.
Hartley Brody

10
Bazen, genellikle ticari nedenlerle, birisinin kodunuzu kullanmasına izin vermek isteyebilirsiniz, ancak uygulamanıza erişiminiz olmayabilir. Bu durumda, bir başlık dosyası ve daha önce derlenmiş olan kütüphane veya nesne kodunu sağlarsınız.
Luke Graham

Ahh, anlıyorum. Kod zaten derlenmiş, bu nedenle kullanılabilir ama okunamaz olacağını düşünmemişti. Teşekkürler!
Hartley Brody

3
Ayrıca, kodunuzu nasıl kullanacağınızı öğrenmek için uygulamayı neden okumak isteyeyim? Başlık dosyasını okumak yeterli olmalıdır.
Per Johansson

5

Bir başlığın ana nedeni, #includebaşka bir dosyada bunu yapabilmenizdir , böylece bir dosyadaki işlevleri başka bir dosyadan kullanabilirsiniz. Üstbilgi (yalnızca) işlevleri kullanabilmeye yetecek kadar içerir ( işlevlerin kendileri değil), bu nedenle derlemek çok daha hızlıdır.

Hiç kimse süreci en iyi şekilde otomatikleştiren bir editör yazmamış olan iki sonucu en iyi şekilde korumak. Orada bir nedenle bir sürü gerçekten değil olamazdı bunu ve birkaç bile çalıştık - ama çok yapmış editörler pazarında çok iyi yapmadım, ve daha yaygın editörler bunu kabul değil.


2

Bir başlık eklemek, kodunuzun başka bir yerde yazılmış ve yazılım projenizin / derlemenizin bir parçası olabilecek veya olmayabilecek, ancak yazılımı oluştururken 'bağlayıcı' tarafından bulunabilecek işlevleri veya yöntemleri çağırmasını sağlar.

Örneğin, standart C kütüphanesinde bir işlevi çağırdığınızda, o işlevin tüm iç kısımlarını projenize koymak istemezsiniz - programınızın onu çağırmasını beklersiniz.

Ancak derleyicinize, kodu göremese ve başlık bunu yapsa bile, işlevin bir yerde var olduğu söylenmelidir. Derleyici tamamlandığında, bağlayıcı çağrılır ve kodunuzun, kütüphane çağrıları gibi sarkan bırakılan bitlerini 'bağlar'.


1

Başlık dosyaları esas olarak işlevlerinizin imzalarını (yani işlev adı, dönüş değeri ve bağımsız değişkenler) diğer dosyalara bildirmek ve dahil etmek için kullanılır. Derleyici, dosyalarınızı derlerken ve birbirine bağlarken bu imzaları bilmelidir.

Daha fazla bilgi için bu makaleyi okuyun .

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.