uzmanlar için soru #define - sayfa 2

 
Pekala, çıldırın, erkekler bile pedsiz yaşayamaz.
 
Nikolai Karetnikov :

Teşekkür ederim! )

Esasen.

Sınıflı bir varyantta da durdum. Günlük kullanım olmadan #define parametreleştirme gibi basit şeyler bile çabucak unutulur.

Sinirler tarafından.

Tanrım, burada herkes ne kadar savunmasız, alt metni olmadan, incitme veya rencide etme niyeti olmadan bir soru soruyorsun, ama hayır, tanınmayan bir dehanın ruhunda bir yerde, başka bir sevgili pahasına kendini gösterme arzusu karıncalanıyor ve eğlenceli. İngilizce forumda bununla karşılaşmıyorum, oraya düzenli olarak yazmama rağmen. Bunu fark ettiğimde, genellikle bu tür açıklamalara tepki vermemeye çalışırım, ancak Dmitry, sözlü bir savaşta eğlenmek istiyorsanız, o zaman sizi kendi yayılımlarınıza daldırarak size zevk vereceğim.

Sineği sürdü bebeğim.

 
Vladimir Simakov :

Bu çözümü neden hemen bir kişiye göstermedin?)))

UPD: bezgovna - hayır sh..t yazıldığından)))

Bunu bilmediğim düşüncesi seni rahatlattı. Bu yüzden kendi ölülerinizin orgazmında savaşmaya devam edin.

 
Dmitry Fedoseev :
Pekala, çıldırın, erkekler bile pedsiz yaşayamaz.

Pedler hakkında.

Singleton neden iyi? Ana kodda her şey kısa ve öz iken, durumu saklayabilmeniz, günlükleri karmaşık mantığa göre işleyebilmeniz vb. Böylece doğru proje mimarisi oluşturulur ve kodun kendisi daha okunabilir hale gelir.

not. Ve böylece, evet, her şey amatör. Buradaki topluluktaki birçok insan için, Macar notasyonuna sahip spagetti kodu güzel ve yakın ve her kene üzerinde tüm siparişleri ve konumları (genellikle tümü) yineleyen mazoşizm gelişiyor)

 

Uzun zaman önce (yıllar önce) .... zaten en iyi günlükler hakkında bir konu vardı, ister ayrı ister başka bir dalda, hatırlamıyorum.

ama biraz farklı yaptılar. Fonksiyonun adını tanımladılar ve fonksiyon adının her türlü makro satırını eklediler ve böyle devam etti ... ve sonra anında işleyiciyi değiştirmek mümkün oldu

"#defin PRINT hazırlığı; Print" gibi bir şey

baskının kendisi tarz

void Print (string a; string a1="";     string a2="";...... // 64 kez. üzgünüm, sadece ...a[] yazamazsınız

{

Yazdır (Hazırlığımız, argümanlar);

}

Normal bir baskıda olduğu gibi tanımla çalışmak mümkündü ve işleyiciyi değiştirerek bir dosyaya veri yazabilir veya ekranda görüntüleyebilirsiniz. Aynı zamanda, argüman sayısı herhangi bir (64 parçaya kadar) // bu bilmeyenler için

Bu arada, bu kısmen   yazar ne sordu

 
Dmitry Fedoseev :
Ancak, ne yazık ki, enayiler üzerinde bir izlenim bırakmayacaksınız.

Sen istiyor musun?

Kusura bakmayın ama Assembler'ın hala kullanıldığı (üzgünüz - kullanılmış) o zamanlardan hatırladığım kadarıyla makro uzantısı (makro), derlemeden hemen önce tanımını koduyla değiştirmenize olanak sağlayan bir araçtır.

Basitçe, Assembler'da programlama oldukça hemoroiddir ve alt rutinler yoktur.

MQL'de programlama çok daha rahattır.

Soru: Bir alt program yazarken daha rahat mısınız yoksa sadece Yazdır komutu mu ("Sayfa yok"); veya önişlemcide önceden tanımlanacak bir şey mi?

 
Алексей Тарабанов :

(1) istiyor musunuz?

Kusura bakmayın ama Assembler'ın hala kullanıldığı (üzgünüz - kullanılmış) o zamanlardan hatırladığım kadarıyla makro uzantısı (makro), derlemeden hemen önce tanımını koduyla değiştirmenize olanak sağlayan bir araçtır.

(2) Basitçe, Assembler'da programlama oldukça hemoroiddir ve alt rutinler yoktur.

MQL'de programlama çok daha rahattır.

(3) Soru: Bir alt program yazarken daha rahat mısınız yoksa sadece Print("Sayfa yok"); veya önişlemcide önceden tanımlanacak bir şey mi?

1) Soru bana ait değil.

2) Montajcıda alt programlar var.

3) Çürük bir yumurtaya bile değmeyen konularda saçmalamamaktan daha rahatım.

 
Alexandr Andreev :

Uzun zaman önce (yıllar önce) .... zaten en iyi günlükler hakkında bir konu vardı, ister ayrı ister başka bir dalda, hatırlamıyorum.

ama biraz farklı yaptılar. Fonksiyonun adını tanımladılar ve fonksiyon adının her türlü makro satırını eklediler ve böyle devam etti ... ve sonra anında işleyiciyi değiştirmek mümkün oldu

"#defin PRINT hazırlığı; Print" gibi bir şey

baskının kendisi tarz

void Print (string a; string a1="";     string a2="";...... // 64 kez. üzgünüm, sadece ...a[] yazamazsınız

{

Yazdır (Hazırlığımız, argümanlar);

}

Normal bir baskıda olduğu gibi tanımla çalışmak mümkündü ve işleyiciyi değiştirerek bir dosyaya veri yazabilir veya ekranda görüntüleyebilirsiniz. Aynı zamanda, argüman sayısı herhangi bir (64 parçaya kadar) // bu bilmeyenler için

Bu arada, bu kısmen   yazar ne sordu

string aN="" ve 63 kez şiddetlidir.

Açıklarım:

  1. string, wchar_t* öğesini saran bir nesnedir.
  2. 63 kez string="" yaparak şunları yaparsınız: 63 dize nesnesi için bellek ayrılır (bu durumda yığında), parametrik bir kurucu çağrılır (63 kez), belirli bir boyutta bir wchar_t * arabelleği ayrılır yığında (tam olarak orada), 0x0000 olarak başlatılan ilk iki bayt (evet, bu da 63 kez olur).

Zaten bu tarzda yapıyorsanız, string=NULL yapın, bu durumda, yığın üzerinde gereksiz bellek ayırmanın ana maliyetlerini ortadan kaldıracaksınız.

UPD. Hayır, yanılıyorum, her şey akıllıca yapılırsa, yığında bellek tahsisi olmayacaktır.

 
Vladimir Simakov :

string aN="" ve 63 kez şiddetlidir.

Açıklarım:

  1. string, wchar_t* öğesini saran bir nesnedir.
  2. 63 kez string="" yaparak şunları yaparsınız: 63 dize nesnesi için bellek ayrılır (bu durumda yığında), parametrik bir kurucu çağrılır (63 kez), belirli bir boyutta bir wchar_t * arabelleği ayrılır yığında (tam olarak orada), 0x0000 olarak başlatılan ilk iki bayt (evet, bu da 63 kez olur).

Zaten bu tarzda yapıyorsanız, string=NULL yapın, bu durumda, yığın üzerinde gereksiz bellek ayırmanın ana maliyetlerini ortadan kaldıracaksınız.

UPD. Hayır, yanılıyorum, her şey akıllıca yapılırsa, yığında bellek tahsisi olmayacaktır.

Burada bir kez daha ne konuşma hakkında vkuril değilsiniz. Alexander, Print()'in define ile değiştirilmesi hakkında yazıyor (böylece tüm dosyada gezinmemek ve tüm baskıları aramamak için). Bununla ilgili sorun, Print'in birden çok parametreye sahip olabilmesidir, ancak hiç kimse bunları parametre olarak ayırt etmese de - yalnızca virgülle ayrılmış bir dize. Bu nedenle, standart Yazdır işlevi için bir yedek sağlamak için 64 isteğe bağlı parametre alan bir işleve ihtiyacımız var (Yazdır() işlevine tam olarak karşılık gelmesi için). Ve günlükten önce bazı veriler eklemek için buna ihtiyacınız var, belki daha iyi görmek için oklu bir şerit (==>), belki bir satır numarası, belki bir tarih, belki bir dosyaya çıktı. Bu çalışmanın hızı kimseyi heyecanlandıramaz, çünkü bu özellikle zor durumlarda hata bulma yapılır ve sonra kaldırılır.

 
string _info;
void _Print( string s, string s1= "" , string s2= "" , string s3= "" , string s4= "" , string s5= "" , string s6= "" , string s7= "" , string s8= "" )//.....
   {
   string ss;
   StringConcatenate (ss,s,s1,s2,s3,s4,s5,s6,s7,s8);//....
   //Comment(_info,ss);
   Print (_info,ss);
   }
#define Print _info= __FILE__ + " line " + __LINE__ + " " + __FUNCSIG__ + " Print: " ; _Print

void OnStart ()
  {
   
   Templ();
  }
  
void Templ()
   {
   Print ( "Error, a!=" , 5 , " and other...." , 3 , 4 , 5 );
   Print ( "a=" , 5 );
   Print ( "Hi" );
   }


Herkes anlıyor gibi...

Yani bu, yolculuğuna yeni başlayanlar için ....

Yine de bir stat sınıfına sarabilir ve ardından geri kalanları eşitleyen bir bağlantı döndürebilirsiniz. if (a!=5) Print (a); ile çalışırken bu yöntemde bir eksi vardır. bu işe yaramaz, if (a!=5) {Print(a);} yazmalısın, derslerde bu anı düzeltebilirsin ama tembellik)) ama genel olarak her şey tarih arşivlerinde görünüyor

sınıflarda verilerimizi statik bir yöntemle başlatıyoruz ve print'imizin çağrısını bir operatörle birleştiriyoruz .... o zaman if (a!=5) Print(a); , çalışacak