错误、漏洞、问题 - 页 1003 1...99699799899910001001100210031004100510061007100810091010...3184 新评论 sion 2013.06.17 04:14 #10021 stringo:ts==true和ts!=NULL是完全不同的表达方式。此外ts==true和ts!=false也是不同的表达方式你知道它们有什么不同吗?不仅是在语法上,而且在语义上。 但问题的重点是,ts是一个数组。还有,为什么这个if(ts)能编译,而上面的却不能。 Slava 2013.06.17 04:35 #10022 sion: 只是问题的重点是,ts是一个数组。为什么这个if(ts)可以编译,而上面提到的那些却不能。表达式if(ts)意味着数组对象ts实际存在。我特别提出了语义学。你想禁止编译此案还是警告就够了?(顺便说一下,必须有一个警告。如果没有警告,那就是我们的错,有东西断了) sion 2013.06.17 04:44 #10023 关于交易、自动交易系统和交易策略测试的论坛 虫子,虫子,问题 stringo, 2013.06.17 06:35 If(ts)表达式意味着ts数组对象实际存在。我特别提到了语义学。你想禁止编纂这个案例,还是说一个警告就够了?(顺便说一下,应该有一个警告。如果没有警告,那就是我们的错,有东西坏了)int ts[20]; void OnInit(){ ts[0]=0;ts[1]=1; if(ts)Print("ts[0]=0"); ts[0]=1; if(ts)Print("ts[0]=1");} void OnTick(){}2013.06.17 08:41:31 test_forum (EURUSD.e,M15) ts[0]=1它看起来更像是在为数组的第一个单元工作。 A100 2013.06.17 06:13 #10024 #import "Test.ex5" void A(); #import "5Test.ex5" void A(); #import "Test5.ex5" void A(); #import void B() { Test::A(); } //нормально void C() { Test5::A(); } //нормально void D() { 5 Test::A(); } //ошибка компиляции ServiceDesk不承认这个错误,提到标识符不能以数字开头。 但5Test不是一个标识符,它是一个文件名。而且文件名可以以数字开头,对#import .ex5文件名没有限制。 Slava 2013.06.17 07:10 #10025 A100:ServiceDesk不承认这个错误,提到标识符不能以数字开头。但5Test不是一个标识符,它是一个文件名。而且文件名可以以数字开头,对#import .ex5文件名没有任何限制。5Test::A 是一个标识符。而且,只要这个名字在导入 句中用引号括起来,5Test就能被识别为一个文件名(顺便说一下,你在那里也写了 "5Test.ex5")。 A100 2013.06.17 07:43 #10026 这就是为什么C/C++编译器会自动在文件/模块中的函数名称的内部表示上添加下划线(_),这样结尾的名称"_5TestA "就不会以数字开头,这就保证了兼容性 Slava 2013.06.17 07:52 #10027 A100: 这就是为什么C/C++编译器会自动在文件/模块中的函数名称的内部表示中添加一个下划线字符(_),这样产生的名称"_5TestA "就不会以数字开头,从而确保兼容性事实证明,结果是如此。你只需要接受它。这是一个危险的编辑位置--编译器的行为会发生很大的变化,以至于没有人会感到高兴。 A100 2013.06.17 08:47 #10028 stringo: 这是一个危险的编辑位置--编译器的行为可能被改变得很厉害,以至于没有人会满意。 我同意。 请看一下这个例子。#define aX( X ) (X) void K() { int aX = 10; Print( aX( 5 ) ); Print( aX ); } // ошибка компиляции C/C++编译器有足够的头脑来区分aX变量和aX( X )参数宏。 在没有内联函数的情况下,参数宏是唯一的选择,而且在冗长的代码中,名称往往会出现重叠。 Slava 2013.06.17 08:57 #10029 A100: 同意。 请看一下这个例子。 在类似的情况下,C/C++编译器有能力区分变量aX和参数宏aX( X )。 看治疗师!(进入服务台) Nikolai Karetnikov 2013.06.17 15:17 #10030 Rosh:当然,前几天刚刚公布了一些例子。演示_指示器SetInteger演示_指示器设置双数 演示_指示器设置字符串 谢谢你!在你的帮助下,我已经明白了。 1...99699799899910001001100210031004100510061007100810091010...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
ts==true和ts!=NULL是完全不同的表达方式。
此外
ts==true和ts!=false也是不同的表达方式
你知道它们有什么不同吗?不仅是在语法上,而且在语义上。
只是问题的重点是,ts是一个数组。为什么这个if(ts)可以编译,而上面提到的那些却不能。
表达式if(ts)意味着数组对象ts实际存在。我特别提出了语义学。
你想禁止编译此案还是警告就够了?(顺便说一下,必须有一个警告。如果没有警告,那就是我们的错,有东西断了)
关于交易、自动交易系统和交易策略测试的论坛
虫子,虫子,问题
stringo, 2013.06.17 06:35
If(ts)表达式意味着ts数组对象实际存在。我特别提到了语义学。
你想禁止编纂这个案例,还是说一个警告就够了?(顺便说一下,应该有一个警告。如果没有警告,那就是我们的错,有东西坏了)
void OnInit()
{
ts[0]=0;ts[1]=1;
if(ts)Print("ts[0]=0");
ts[0]=1;
if(ts)Print("ts[0]=1");
}
void OnTick()
{
}
ServiceDesk不承认这个错误,提到标识符不能以数字开头。
但5Test不是一个标识符,它是一个文件名。而且文件名可以以数字开头,对#import .ex5文件名没有限制。
ServiceDesk不承认这个错误,提到标识符不能以数字开头。
但5Test不是一个标识符,它是一个文件名。而且文件名可以以数字开头,对#import .ex5文件名没有任何限制。
5Test::A 是一个标识符。
而且,只要这个名字在导入 句中用引号括起来,5Test就能被识别为一个文件名(顺便说一下,你在那里也写了 "5Test.ex5")。
这就是为什么C/C++编译器会自动在文件/模块中的函数名称的内部表示中添加一个下划线字符(_),这样产生的名称"_5TestA "就不会以数字开头,从而确保兼容性
事实证明,结果是如此。你只需要接受它。
这是一个危险的编辑位置--编译器的行为会发生很大的变化,以至于没有人会感到高兴。
这是一个危险的编辑位置--编译器的行为可能被改变得很厉害,以至于没有人会满意。
我同意。
请看一下这个例子。
C/C++编译器有足够的头脑来区分aX变量和aX( X )参数宏。
在没有内联函数的情况下,参数宏是唯一的选择,而且在冗长的代码中,名称往往会出现重叠。
同意。
请看一下这个例子。
在类似的情况下,C/C++编译器有能力区分变量aX和参数宏aX( X )。当然,前几天刚刚公布了一些例子。
谢谢你!在你的帮助下,我已经明白了。