Menu

C'de Yorumlar: // ve /* */ Anlatılıyor

C'nin iki yorum biçimi vardır - tek satırlık // ve çok satırlı /* */ - farklı geçmişleri ve bir iç içe yerleştirme tuzağıyla. İşte ikisinin de nasıl kullanılacağı, ayrıca neyi yorumlamaya değer neyi değmez.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

Yorum, derleyicinin çöpe attığı metindir. Yalnızca kodu daha sonra okuyacak insanlar için vardır ve bunlardan biri genellikle sizsiniz. C iki biçim sunar ve her birinin ne zaman doğru araç olduğunu bilmek yaklaşık iki dakika sürer.

İki Biçim

Çalıştırın: çıktı tek satırdır. Her iki yorum da derleyici programı ayrıştırmadan önce silindi - çalışma zamanında hiçbir maliyetleri yoktur ve çalıştırılabilir dosyaya hiçbir şey eklemezler.

// fiziksel satırın sonuna kadar sürer. O satırda ardından hiçbir şey gelemez, dolayısıyla bu göründüğü gibi çalışmaz:

int x = 5;  // x'i beşe ayarla  int y = 6;   /* y hiç bildirilmedi */

/* ... */ nerede olursa olsun ilk */ işaretinde biter. Satır ortasında başlayıp bitebilir ki bu zaman zaman işe yarar:

int total = price /* vergi öncesi */ + shipping;

Neden İki Biçim Var

/* */, 1972'den, özgün C'dendir. // C++'tan geldi ve C'ye resmen ancak C99'da eklendi. Bu geçmiş, eski kodu okurken fark edeceğiniz bir şeyi açıklar: C89'a taşınabilir olacak şekilde yazılmış kütüphaneler tek satırlık yorumlar için bile /* */ kullanır, çünkü // hâlâ destekledikleri eski araç zincirlerinde derlenmezdi.

Bugün kullanma ihtimaliniz olan her derleyici ikisini de kabul eder. Sıradan notlar için //, bir yorum gerçekten satırlara yayıldığında /* */ kullanın. Çok eski bir gömülü derleyiciyi hedefliyorsanız //'ye güvenmeden önce kontrol edin.

Yorumlar İç İçe Geçemez

Tek gerçek tuzak budur:

/* Bu bölümü şimdilik devre dışı bırak
   int a = compute();
   /* klasik yardımcı - gözünüz üstünde olsun */
   int b = a * 2;
*/

Blok yorum ilk */ işaretinde, yani 3. satırdakinde biter. 4 ve 5. satırlar o zaman yine canlı koddur ve 6. satırdaki sondaki */ bir söz dizimi hatasıdır. Derleyicinin mesajı son satırı gösterir ve sebep konusunda tamamen faydasızdır.

Çözüm, iç içe geçmeyi gerçekten halleden ön işlemciyi kullanmaktır:

#if 0
    int a = compute();
    /* klasik yardımcı - gözünüz üstünde olsun */
    int b = a * 2;
#endif

#if 0 asla doğru olmaz, dolayısıyla ön işlemci, derleyici görmeden önce #endif'e kadar olan her şeyi siler. İçerideki yorumlardan, tırnaklardan ve diğer #if bloklarından etkilenmez ve temizlik yaparken aramak kolaydır.

Hata Ayıklarken Kodu Yorum Satırına Almak

Bir satırı geçici olarak kaldırmak, yorumların en yaygın günlük kullanımıdır. Bir program yanlış davrandığında her seferinde bir deyimi devre dışı bırakmak size hangisinin önemli olduğunu söyler.

printf'i yorumdan çıkarıp döngünün cevabını nasıl oluşturduğunu izlemek için tekrar çalıştırın. Yazdırarak izlemek zarif değildir, ama C'de hızlıdır ve her zaman işe yarar - bir hata ayıklayıcı size daha fazlasını söyler, bir printf ise bir şeyi hemen söyler.

İki alışkanlık bunun karmaşaya dönüşmesini engeller. Yorum satırına alınmış kodu işlemeden (commit) önce silin; sürüm denetimi eski sürümü hatırlar, sizin hatırlamanıza gerek yok. Ve devre dışı bir satırı bilerek bıraktığınızda, yanına bir notla nedenini söyleyin.

Belgeleme Yorumları

Bir fonksiyonun üstündeki blok yorum, ne yaptığını, parametrelerinin ne anlama geldiğini ve onunla ilgili şaşırtıcı her şeyi açıkladığınız yerdir.

Doxygen gibi araçlar bunun gibi yapılandırılmış yorumları okur ve başvuru belgeleri üretir. Doxygen'in kendi tarzı @param ve @return etiketleriyle /** ... */ kullanır:

/**
 * Santigradı Fahrenheit'a çevirir.
 * @param c Santigrat cinsinden sıcaklık
 * @return aynı sıcaklığın Fahrenheit karşılığı
 */
double celsius_to_fahrenheit(double c);

Kendi kodunuz için ikisi de uygundur. Önemli olan, yorumun insanların okuduğu bildirimin yanında - genellikle başlık dosyasında - durması, gerçekleştirimin içine gömülmemesidir.

Neyi Yorumlamaya Değer

Gerçek kod tabanlarıyla temastan sağ çıkan kural: neyi değil, nedenini yorumlayın.

i++;  // i'yi artır          <- kodun söylemediği hiçbir şey söylemiyor
/* BOM'u atla: eski sistemin dışa aktardığı dosyalar
   verinin parçası olmayan üç baytla başlar. */
offset += 3;

İkinci yorum, kodun hiçbir yerinde olmayan bilgi içerir. Birincisi, sonunda tarif ettiği satırla çelişecek gürültüdür, çünkü kod değiştiğinde yorumlar güncellenmez.

Özellikle C'de bir yoruma gerçekten değen şeyler:

  • Bu belleğin sahibi kim. Bir fonksiyon, çağıranın free etmesi gereken bir gösterici döndürüyorsa bunu söyleyin. C'nin bunu türde ifade etmenin bir yolu yoktur.
  • Birimler ve aralıklar. int timeout; belirsizdir - saniye mi milisaniye mi?
  • Aşikâr olmayan doğruluk. Döngünün neden n - 1'de durduğu, bu dönüşümün neden güvenli olduğu, tamponun neden 256 bayt olduğu.
  • Kasıtlı tuhaflık. Hata gibi görünüp olmayan kod, etiketlenmedikçe gelecekteki okuyuculardan "düzeltme" çeker.

O yorum yerini hak eder: altındaki satır gereksiz görünür ve değildir.

Metinlerin İçindeki Yorumlar Yorum Değildir

Son bir ayrıntı. Yorum işaretlerinin bir metin sabitinin ya da karakter sabitinin içinde özel bir anlamı yoktur:

Her iki satır da eksiksiz yazdırılır. Derleyici metinleri yorumları aramadan önce belirteçlere ayırır, dolayısıyla tırnak içindeki // yalnızca iki karakterdir. (İlk satırdaki %%, printf ile gerçek bir yüzde işaretini böyle yazdırırsınız - tek başına % bir biçim belirteci başlatır.)

Sıkça Sorulan Sorular

C'de yorum nasıl yazılır?

İki yol. // bu bir yorumdur satırın sonuna kadar sürer. /* bu bir yorumdur */ istediğiniz kadar satıra yayılabilir ve kapanış */ ile biter. İkisi de derlemeden önce kaldırılır, dolayısıyla programı asla etkilemezler.

C, // yorumlarını destekler mi?

Evet, C99'dan beri. C++'tan ödünç alındılar ve bugün evrensel olarak destekleniyorlar. Yalnızca gerçekten çok eski C89 derleyicileri onları reddeder; çok eski kodun tek satırlıklar için bile /* */ kullanmasının sebebi budur.

C'de yorumlar iç içe yazılabilir mi?

Hayır. /* dış /* iç */ hâlâ dış */ ilk */ işaretinde biter ve geriye bozuk kod olarak hâlâ dış */ kalır. İçinde zaten /* */ yorumları olan bir bloğu devre dışı bırakmak için bunun yerine doğru biçimde iç içe geçen #if 0 ... #endif kullanın.

C'de bir kod bloğu nasıl yorum satırına alınır?

İçinde blok yorum yoksa /* */ ile sarın ya da her satırın başına // koyun. Büyük bölgeler için sağlam seçenek, öncesine #if 0 ve sonrasına #endif koymaktır - ön işlemci aradaki her şeyi siler ve bu, içerideki yorumlardan ve tırnaklardan etkilenmez.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA