错误、漏洞、问题 - 页 2725 1...271827192720272127222723272427252726272727282729273027312732...3184 新评论 Alexey Navoykov 2020.04.24 14:35 #27241 Vict: 你认为你的夏普出现在一个干净的领域吗?根植于C语言,该结构是一个哑巴容器,没有多余的糖。 嗯,人类是从猴子进化而来的。但这并不意味着人是一只 "没有任何额外糖分 "的笨猴子,不是吗?)我已经解释过,事实上MQL结构=C#结构,有一个小的区别:在C#中,他们仍然可以实现接口。 接口,卡尔!) 你怎么能如此肯定?从另一个翻译单元/另一个模块/周期/编译器中调用一个函数,不符合要求/....不要高估优化器的能力。这不是编译器必须要做的Copy elision优化。如果优化人员变得如此聪明,不再花费任何代价,他们会在下一个C标准中写道:"默认初始化不会让对象处于未定义状态"。 因为这是最琐碎、最原始的事情,你甚至不能称之为优化。 我想所有的编译器都会默认这样做,即使是在调试模式下。 还有什么能更简单呢? 在代码解析期间,你必须跟踪对变量的访问。如果有一个重复的写操作,并且没有读操作,那么就切掉前一个条目。 你可以忽略它,但随后不要惊讶,当体面的编码员看到你的结构中塞满了函数时,他们会把你看成是一个狗屎编码员 。 我更愿意称你对未初始化操作的做法为狗屎编码。 一个计算机程序必须具备的主要品质是什么? 稳定性。 在相同的输入数据下,它必须给出不可改变的结果。 而你提议忘记它。 在某个地方你忘记初始化一个变量,在某个地方你在结构中添加了一个新的字段,在整个程序中成为未初始化的,而程序继续进行。该计划以这种方式和那种方式运作... C语言是在遥远的过去创建的,当时的硬件能力非常差,所以大部分的优化工作都留给了程序员。如果你这么心痒难耐,为什么要提到C语言而不是汇编语言呢? 用汇编语言编码交易系统,我相信他们会是最快的,甚至可能领先于市场 ) [删除] 2020.04.24 15:05 #27242 Alexey Navoykov: 因为这是最琐碎、最原始的事情,甚至很难说是优化。 我想所有的编译器都会默认这样做,即使是在调试模式下。 还有什么比这更简单的呢? 在解析代码的同时,监控变量的访问。如果有一个重复的写操作,并且没有读操作,那么就切掉前一个条目。 如果程序在编译时是完全可预测的,那么在运行时就根本不用执行。根据定义,它应该从外部世界获取一些东西,并在此基础上输出一个结果,而这就是妨碍优化器的不确定性。另一个秘密--共享库在运行时与应用程序链接,优化器不能在那里追踪任何东西。还有一百万个案件要被抛出。(一百万,卡尔!) 在某个地方,我忘记了初始化一个变量,或者在一个结构中添加了一个新的字段,在整个程序中变得没有初始化,而程序还在继续。该计划以这种方式和那种方式运作... 在某处我乘以2而不是3,调用fn()而不是fn_(),......。.如果你的手是错的,你就有麻烦了。 C语言是在很久以前创建的,当时硬件能力很差,这就是为什么很多优化工作都留给了程序员。如果你心痒难耐,为什么要提到C语言而不是汇编语言? 用汇编语言编码交易系统,我相信它们会是最快的,甚至可能领先于市场。 供您参考:C标准(最新的,这些不是C++标准):C11,C18,C2x正在准备中。相反,你写这个是无能的结果。 Alexey Navoykov 2020.04.24 16:50 #27243 Vict:如果程序在编译时是完全可预测的,那么它根本不需要在运行时执行。根据定义,它必须从外部世界获取一些东西并在此基础上输出一个结果,而这是阻碍优化器的不确定性。另一个秘密--共享库在运行时与应用程序链接,优化器不能在那里追踪任何东西。还有一百万个案件要被抛出。一百万,卡尔!) 与外部世界的数据交换 是特殊情况,需要特殊的解决方案。 我们谈论的是编程本身,以及那些保证编译器知道变量不受外部控制的情况。 而这一定是绝大多数的情况。 否则你有一个纯粹的系统编程,这确实最好用C语言来做,或者甚至更好--用汇编程序。 在某处乘以2而不是3,调用fn()而不是fn_(),。.如果你的手是歪的,麻烦了。 如果你乘以2而不是3,你就会在程序中得到一个 稳定的 错误,这很容易诊断和发现。 而如果变量没有被初始化,你就会得到一些时而正常时而不正常的东西,后果不可预料。一般来说,我冒充有经验的程序员向你解释这样的基础知识是相当奇怪的。 [删除] 2020.04.24 17:58 #27244 Alexey Navoykov: 与外界的数据交换--这些是特殊情况,需要特殊的解决方案。 但我们谈论的是编程本身,以及那些保证编译器知道变量不受外界控制的情况。 而这应该是绝大多数的情况。 否则,你会得到一个纯粹的系统编程,这确实最好用C语言来做,或者甚至更好--用汇编语言。 与外部世界的沟通是任何项目的一个重要组成部分。让我再重复一遍--否则,它可以在编译时算出来。例如,编译器会不会在这里削减初始化? int i = 54; if (read_socket() == SIGNAL) { fn(i); } i = 100; ... // естественно, что никто не пишет такой бред: int q = 3; q = 7; q = 9; fq(q); 很明显,它不知道read_socket()会返回什么。整个项目 "渗透 "在与外部世界的互动中。+ 在这里添加对外部模块的调用.... 如果你把它乘以2而不是3,你就会在程序中得到一个 稳定的 错误,这很容易诊断和发现。 而对于一个未初始化的变量,你会得到一些现在能用,然后又不能用的东西,时不时地,会产生不可预知的后果。事实上,我向冒充经验丰富的程序员的你解释这样的基础知识是相当奇怪的。 看,如果你想得到一个稳定的错误,初始化堆栈是非常简单的。 int main() { if (true) int init_stack[10000] {0}; } 从HIP初始化内存也是小菜一碟。如果我们遇到了一些代表性的陷阱,我们将得到一个核心转储的根本。 再次,如果优化人员非常聪明,他们会将默认init与值init等同起来,由编译器根据需要插入初始化指令,但可惜的是,在一些C11中。没有人强迫,如果你不愿意,让T val{}; 厌倦了解释初级的东西。 Alexey Navoykov 2020.04.24 20:34 #27245 Vict: 再一次,如果优化人员非常聪明,他们会把默认init等同于值init,编译器会根据需要在一些C11中插入初始化指令,但可惜。没有人强迫,如果你不想要,就把T变成val{}; 厌倦了解释初级的东西。 因为,根据我的理解,C++标准非常正式地描述了规则,没有上下文。 也就是说,初始化要么总是,要么从不。 作为比较,在C#中,你可以声明一个变量而不初始化,但在代码中,它必须被初始化。也就是说,编译器会分析后面的代码,而不仅仅是当前的命令。 这是语言规则中规定的。 但是标准中没有规定C++中的任何分析。因此,如果他们强制初始化,你会抱怨说,我想自己控制和初始化所有的东西!) [删除] 2020.04.25 01:49 #27246 Alexey Navoykov: 因为根据我的理解,C++标准非常正式地描述了这些规则,没有上下文。 也就是说,初始化要么总是,要么从不。 相比之下,在C#中,你可以声明一个变量而不进行初始化,但在代码中,它必须进一步被初始化。也就是说,编译器会分析后面的代码,而不仅仅是当前的命令。 这是语言规则中规定的。 但是标准中没有规定C++中的任何分析。因此,如果他们强制初始化,你会抱怨说,我想自己控制和初始化所有的东西!) 只是有经过测试的解决方案,如果它能开箱即用,往往会造成不必要的开销,那么就不会有人把它包括在内。 例如,他们在标准中规定,编译器必须在c++17中进行复制消除。 Artyom Trishkin 2020.04.25 02:48 #27247 这个话题被称为 "错误、错误、问题"。 请创建一个话题,讨论MQL与C#,C++以及其他与语法、编译器和心理锻炼有关的事情。 你在乱扔垃圾,其他问题和用户的信息都淹没在你的讨论中。 他们问我在哪里问问题--我被引导到这里,答案是:"叔叔们在那里争论了一百多页,我就不插嘴了,其他的都没有意义......。 Alain Verleyen 2020.04.25 03:11 #27248 const int DEFAULT_INT_VALUE = 147; input int thisIsAnInput = DEFAULT_INT_VALUE; 'NoConstForInput.mq5' NoConstForInput.mq5 1 1'DEFAULT_INT_VALUE' - 常数预期 NoConstForInput.mq5 13 33 1个错误,0个警告 2 1 第2361和2390号建筑 fxsaber 2020.04.25 05:31 #27249 Alain Verleyen: 'NoConstForInput.mq5' NoConstForInput.mq5 1 1'DEFAULT_INT_VALUE' - 常数预期 NoConstForInput.mq5 13 33 1个错误,0个警告 2 1 第2361和2390号建筑 #define DEFAULT_INT_VALUE 147 [删除] 2020.04.25 08:30 #27250 Vict: 看,如果你想得到一个稳定的错误,初始化堆栈是非常容易的。 从HIP中初始化内存也是小菜一碟。如果我们遇到一些代表性的陷阱,我们会得到一个完全的核心转储。 最后一句话,请不要对版主生气))。 我需要澄清为什么堆栈在不同的调用中具有不同的值。这都是为了保护https://ru.wikipedia.org/wiki/ASLR, 你甚至根本不需要分析什么,正如我之前所说的。在我的例子中--我在gdb(调试器)下运行软件,每次运行时都会把它放在相同的地址上,也就是说,堆栈不会被 "随机 "返回地址所污染。 1...271827192720272127222723272427252726272727282729273027312732...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你认为你的夏普出现在一个干净的领域吗?根植于C语言,该结构是一个哑巴容器,没有多余的糖。
嗯,人类是从猴子进化而来的。但这并不意味着人是一只 "没有任何额外糖分 "的笨猴子,不是吗?)我已经解释过,事实上MQL结构=C#结构,有一个小的区别:在C#中,他们仍然可以实现接口。 接口,卡尔!)
因为这是最琐碎、最原始的事情,你甚至不能称之为优化。 我想所有的编译器都会默认这样做,即使是在调试模式下。 还有什么能更简单呢? 在代码解析期间,你必须跟踪对变量的访问。如果有一个重复的写操作,并且没有读操作,那么就切掉前一个条目。
你可以忽略它,但随后不要惊讶,当体面的编码员看到你的结构中塞满了函数时,他们会把你看成是一个狗屎编码员 。
我更愿意称你对未初始化操作的做法为狗屎编码。 一个计算机程序必须具备的主要品质是什么? 稳定性。 在相同的输入数据下,它必须给出不可改变的结果。 而你提议忘记它。 在某个地方你忘记初始化一个变量,在某个地方你在结构中添加了一个新的字段,在整个程序中成为未初始化的,而程序继续进行。该计划以这种方式和那种方式运作...
C语言是在遥远的过去创建的,当时的硬件能力非常差,所以大部分的优化工作都留给了程序员。如果你这么心痒难耐,为什么要提到C语言而不是汇编语言呢? 用汇编语言编码交易系统,我相信他们会是最快的,甚至可能领先于市场 )
因为这是最琐碎、最原始的事情,甚至很难说是优化。 我想所有的编译器都会默认这样做,即使是在调试模式下。 还有什么比这更简单的呢? 在解析代码的同时,监控变量的访问。如果有一个重复的写操作,并且没有读操作,那么就切掉前一个条目。
如果程序在编译时是完全可预测的,那么在运行时就根本不用执行。根据定义,它应该从外部世界获取一些东西,并在此基础上输出一个结果,而这就是妨碍优化器的不确定性。另一个秘密--共享库在运行时与应用程序链接,优化器不能在那里追踪任何东西。还有一百万个案件要被抛出。(一百万,卡尔!)
在某个地方,我忘记了初始化一个变量,或者在一个结构中添加了一个新的字段,在整个程序中变得没有初始化,而程序还在继续。该计划以这种方式和那种方式运作...
在某处我乘以2而不是3,调用fn()而不是fn_(),......。.如果你的手是错的,你就有麻烦了。
C语言是在很久以前创建的,当时硬件能力很差,这就是为什么很多优化工作都留给了程序员。如果你心痒难耐,为什么要提到C语言而不是汇编语言? 用汇编语言编码交易系统,我相信它们会是最快的,甚至可能领先于市场。
如果程序在编译时是完全可预测的,那么它根本不需要在运行时执行。根据定义,它必须从外部世界获取一些东西并在此基础上输出一个结果,而这是阻碍优化器的不确定性。另一个秘密--共享库在运行时与应用程序链接,优化器不能在那里追踪任何东西。还有一百万个案件要被抛出。一百万,卡尔!)
与外部世界的数据交换 是特殊情况,需要特殊的解决方案。 我们谈论的是编程本身,以及那些保证编译器知道变量不受外部控制的情况。 而这一定是绝大多数的情况。 否则你有一个纯粹的系统编程,这确实最好用C语言来做,或者甚至更好--用汇编程序。
在某处乘以2而不是3,调用fn()而不是fn_(),。.如果你的手是歪的,麻烦了。
如果你乘以2而不是3,你就会在程序中得到一个 稳定的 错误,这很容易诊断和发现。 而如果变量没有被初始化,你就会得到一些时而正常时而不正常的东西,后果不可预料。一般来说,我冒充有经验的程序员向你解释这样的基础知识是相当奇怪的。
与外界的数据交换--这些是特殊情况,需要特殊的解决方案。 但我们谈论的是编程本身,以及那些保证编译器知道变量不受外界控制的情况。 而这应该是绝大多数的情况。 否则,你会得到一个纯粹的系统编程,这确实最好用C语言来做,或者甚至更好--用汇编语言。
与外部世界的沟通是任何项目的一个重要组成部分。让我再重复一遍--否则,它可以在编译时算出来。例如,编译器会不会在这里削减初始化?
很明显,它不知道read_socket()会返回什么。整个项目 "渗透 "在与外部世界的互动中。+ 在这里添加对外部模块的调用....
如果你把它乘以2而不是3,你就会在程序中得到一个 稳定的 错误,这很容易诊断和发现。 而对于一个未初始化的变量,你会得到一些现在能用,然后又不能用的东西,时不时地,会产生不可预知的后果。事实上,我向冒充经验丰富的程序员的你解释这样的基础知识是相当奇怪的。
看,如果你想得到一个稳定的错误,初始化堆栈是非常简单的。
从HIP初始化内存也是小菜一碟。如果我们遇到了一些代表性的陷阱,我们将得到一个核心转储的根本。
再次,如果优化人员非常聪明,他们会将默认init与值init等同起来,由编译器根据需要插入初始化指令,但可惜的是,在一些C11中。没有人强迫,如果你不愿意,让T val{}; 厌倦了解释初级的东西。
再一次,如果优化人员非常聪明,他们会把默认init等同于值init,编译器会根据需要在一些C11中插入初始化指令,但可惜。没有人强迫,如果你不想要,就把T变成val{}; 厌倦了解释初级的东西。
因为,根据我的理解,C++标准非常正式地描述了规则,没有上下文。 也就是说,初始化要么总是,要么从不。 作为比较,在C#中,你可以声明一个变量而不初始化,但在代码中,它必须被初始化。也就是说,编译器会分析后面的代码,而不仅仅是当前的命令。 这是语言规则中规定的。 但是标准中没有规定C++中的任何分析。因此,如果他们强制初始化,你会抱怨说,我想自己控制和初始化所有的东西!)
因为根据我的理解,C++标准非常正式地描述了这些规则,没有上下文。 也就是说,初始化要么总是,要么从不。 相比之下,在C#中,你可以声明一个变量而不进行初始化,但在代码中,它必须进一步被初始化。也就是说,编译器会分析后面的代码,而不仅仅是当前的命令。 这是语言规则中规定的。 但是标准中没有规定C++中的任何分析。因此,如果他们强制初始化,你会抱怨说,我想自己控制和初始化所有的东西!)
只是有经过测试的解决方案,如果它能开箱即用,往往会造成不必要的开销,那么就不会有人把它包括在内。 例如,他们在标准中规定,编译器必须在c++17中进行复制消除。
这个话题被称为 "错误、错误、问题"。
请创建一个话题,讨论MQL与C#,C++以及其他与语法、编译器和心理锻炼有关的事情。
你在乱扔垃圾,其他问题和用户的信息都淹没在你的讨论中。
他们问我在哪里问问题--我被引导到这里,答案是:"叔叔们在那里争论了一百多页,我就不插嘴了,其他的都没有意义......。
'DEFAULT_INT_VALUE' - 常数预期 NoConstForInput.mq5 13 33
1个错误,0个警告 2 1
第2361和2390号建筑
'DEFAULT_INT_VALUE' - 常数预期 NoConstForInput.mq5 13 33
1个错误,0个警告 2 1
第2361和2390号建筑
看,如果你想得到一个稳定的错误,初始化堆栈是非常容易的。
从HIP中初始化内存也是小菜一碟。如果我们遇到一些代表性的陷阱,我们会得到一个完全的核心转储。
最后一句话,请不要对版主生气))。
我需要澄清为什么堆栈在不同的调用中具有不同的值。这都是为了保护https://ru.wikipedia.org/wiki/ASLR, 你甚至根本不需要分析什么,正如我之前所说的。在我的例子中--我在gdb(调试器)下运行软件,每次运行时都会把它放在相同的地址上,也就是说,堆栈不会被 "随机 "返回地址所污染。