June 06, 2018

Merhaba,

#include <iostream>

#ifndef LOG
#define LOG(X) { \
       std::cerr << "file \"" << __FILE__ << "\", line " << __LINE__ << ": "; \
       std::cerr << #X" = " << (X) << std::endl; \
   }
#endif

int main()
{
	int var = 15;
	LOG(var);
	LOG(&var);

	std::cin.get();
	return 0;
}

Burada kullanılan makrolarda "\ # FILE" gibi işaretler ne işe yarıyor. Ve sadece makrolardamı kullanılıyorlar ? Ama asıl sorum birçok yerde makoların kötü olduğu ve kullanılmaması gerektiği önerilmiş. Bunun sebebi nedir. Yani "#define NUM 5 ile const int NUM=5" burada neden define yerine diğerini kullanmam gerekiyor ?

Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 06, 2018

FILE ve LINE (ve arkadaşları) özel değişkenlerdir; bulundukları nokta ile ilgili bilgi taşırlar: dosyanın ismi ve satırın numarası.

Makrolar, C++ dilinden çok farklı olan önişlemci ile ilgilidir. C'deki becerilerinin bazıları C++'ta başka olanaklarla halledilebilir: işlev, 'const int', vs. O yüzden, olabildiğince kaçınılır. Şöyle bir çevirim var:

http://acehreli.org/turkcecpp/gotw_077.html

Şu durumlarda yine de gerekir:

  • Bu örnekteki '#X' gibi "ifadeyi dizgiye dönüştürme"

  • FILE ve LINE gibi değişkenlerden yararlanabilme

  • '##' ile iki dizgiyi birleştirme

  • Hazır sabit tanımlama (örneğin, const int bile yer tutar ama #define ile tanımlanan sabit sanki 5 yazılmış gibi derlenir)

  • #include ile başlık ekleme

D, önişlemciden tamamen kurtulabilmiştir:

  • İfadenin dizgisi .stringof ile elde edilebilir. (Makrolar bu konuda daha üstündür ama yine de D çoğu durumda yeter)

  • FILE, LINE, vs. varsayılan parametre değeri olarak kullanıldıklarında işlevin tanımlandığı noktayı değil, işlevin çağrıldığı yeri bildirirler:

http://ddili.org/ders/d/parametre_serbestligi.html#ix_parametre_serbestligi.__FILE__

  • D'nin CTFE olanağı ile her dizgi derleme zamanında birleştirilebilir

  • Hazır sabitler için 'enum' kullanılır

  • D başlık dosyası kullanmaz; #include'un bazı kullanımları için 'import string' var (henüz kitapta yok)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]