向#define专家提问 - 页 2

 
哦,我的上帝,孩子们没有垫子就活不了。
 
Nikolai Karetnikov:

谢谢你!)

本质上。

这就是我在班级选项上的遗留问题。即使是像#define参数化这样的基本东西,如果没有日常使用,也会很快被遗忘。

关于神经。

天啊,这里的人都很敏感;你可以问一个没有暗示的问题,没有冒犯或侮辱的意图,但是没有,在一个未被承认的天才的灵魂深处,你会有一种唠叨和想要以另一个业余者为代价来宣扬自己。我在英语论坛上没有遇到过这种情况,尽管我经常在那里写作。知道这一点后,我通常尽量不对这种言论作出反应,但如果德米特里,你想在口舌之争中嬉戏,我会给你带来乐趣,让你一头扎进自己的发泄中。

切断苍蝇,宝贝。

 
Vladimir Simakov:

你为什么不直接向那个人展示这个决定呢?)

UPD: bezgovna - 拼写无sh...t ))))

好吧,你只是在享受我不知道的想法。因此,只要继续在自己的辉煌的高潮中打压自己。

 
Dmitry Fedoseev:
哦,伙计,孩子们已经离不开垫子了。

关于密封垫。

单子的好处是什么?因为你可以存储状态,用复杂的逻辑处理日志,等等,同时在主代码中保持一切简洁。这样一来,适当的项目架构就被创造出来了,代码本身也变得更加可读。

PS。否则,是的,一切都要靠粉丝。社区中的许多人都喜欢用匈牙利语记号的意大利面条代码,在每一个刻度 上尝试所有的订单和位置(都是一般的)的受虐狂是很好的)。

 

很久以前(很多年前)....已经有一个关于最佳日志的主题,是在一个单独的主题中还是在另一个主题中,我不记得了。

但这是以一种稍微不同的方式进行的。在那里,他们改变了函数名称,并在那里添加了各种函数名称的宏行,等等。然后你就可以临时改变处理程序了

类似于 "#definPRINT prepare; Print"

和印刷品本身的风格

void Print (string a;string a1="";string a2="";...... //很遗憾你不能直接写...a[]

{

打印(我们的准备,论据)。

}

这个定义本来可以作为一个普通的打印处理,通过改变处理程序,我们可以将数据写入文件或在屏幕上显示。参数的数量可以是任何(最多64个)//对于那些还没有学会的人来说。

顺便说一下,这也是作者的部分 要求))。

 
Dmitry Fedoseev:
但是,不幸的是,你不会打动那些傻瓜。

你愿意吗?

对不起,但在我的记忆中,当Assembler还在使用的时候,宏扩展(macro )是一个工具,它允许你在编译前用它的代码替换它的定义。

只是,用Assembler编程有点麻烦,而且没有子程序。

在MQL中编程是比较舒服的。

问题:你是写一个子程序,还是只写Print("No sheet");或者在预处理程序中预先定义的东西更合适?

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

(1) 你愿意吗?

对不起,但在我的记忆中,当Assembler还在使用的时候,宏扩展(macro )是一个工具,它允许你在编译前用它的代码替换它的定义。

(2) 很简单,用Assembler编程相当麻烦,而且那里没有子程序。

在MQL中编程是比较舒服的。

(3) 问题:你是否觉得写一个子程序,或者只是Print("No sheet");或者在预处理程序中预先定义一些东西,会更舒服?

1)这个问题不适合我。

2)在汇编程序中有子程序。

3)我更愿意不在那些不值一提的问题上胡说八道。

 
Alexandr Andreev:

很久以前(很多年前)....已经有一个关于最佳日志的主题,是在一个单独的主题中还是在另一个主题中,我不记得了。

但这是以一种稍微不同的方式进行的。在那里,他们改变了函数名称,并在那里添加了各种函数名称的宏行,等等。然后你就可以临时改变处理程序了

类似于 "#defin PRINT prepare; Print"

和印刷品本身的风格

void Print (string a;string a1="";string a2="";...... //很遗憾你不能直接写...a[]

{

打印(我们的准备,论据)。

}

这个定义本来可以作为一个普通的打印处理,通过改变处理程序,我们可以将数据写入文件或在屏幕上显示。参数的数量可以是任何(最多64个)//对于那些还没有学会的人来说。

顺便说一下,这正是 作者的要求))。

字符串aN=""和63次--这是个煞笔。

让我解释一下。

  1. 字符串是一个对象,它是wchar_t*的一个封装。
  2. 通过使字符串=""63次,你做了以下工作:为63个字符串对象分配内存(在这种情况下在堆栈中),调用参数化构造函数(63次),在堆中分配一个一定大小的wchar_t*缓冲区(就在那里),其前两个字节被初始化为0x0000(是的,这也发生了63次)。

如果你这样做,让string=NULL,在这种情况下,你将节省在堆中分配不必要的内存的主要成本。

UPD。不,我错了,如果操作得当,堆中不会有内存分配

 
Vladimir Simakov:

字符串aN=""和63次是猛烈的。

让我解释一下。

  1. string是一个对象,是wchar_t*的封装器。
  2. 通过使字符串=""63次,你做了以下工作:为63个字符串对象分配内存(在这种情况下在堆栈中),调用参数化构造函数(63次),在堆中分配一个一定大小的wchar_t*缓冲区(就在那里),其前两个字节被0x0000初始化(是的,这也发生63次)。

如果你这样做,让string=NULL,在这种情况下,你将节省在堆中分配不必要的内存的主要成本。

UPD。不,我错了,如果操作得当,堆中不会有内存分配

你又一次不明白我们在谈论什么。亚历山大写道,通过定义取代Print()(以避免爬遍整个文件,寻找所有的打印内容)。这样做的问题是,Print可以有几个参数,尽管没有人把它们区分为参数--只是一个由逗号连接的字符串。因此,为了提供一个标准Print函数的替代品,你需要一个接受64个可选参数的函数(以完全匹配Print()函数)。而且你需要它在日志前添加一些数据,也许是一个带箭头(==>)的条带,以便更好地观察,也许是一个行号、日期或输出到一个文件。根本没有人可以关心这个速度,因为它是在特别复杂的搜索错误的情况下进行的,然后再删除。

 
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");
   }


每个人似乎都明白.....

因此,这是为那些刚刚开始工作的人准备的....。

我们可以将其全部包裹在一个统计类中,并返回一个引用,然后将其余部分均衡化,因为这个方法在与if (a!=5)Print(a)工作时有一个减号;这将不起作用,你应该总是写if (a!=5) {Print(a);},在类中你可以纠正这个时刻,但我太懒了)),一般来说,这似乎都是在历史的档案馆里

按照类的方式,通过静态方法初始化我们的数据,并结合运算符调用我们的print....。那么如果(a!=5)Print(a); 它将工作