错误、漏洞、问题 - 页 1003

 
stringo:

ts==true和ts!=NULL是完全不同的表达方式。

此外

ts==true和ts!=false也是不同的表达方式

你知道它们有什么不同吗?不仅是在语法上,而且在语义上。

但问题的重点是,ts是一个数组。还有,为什么这个if(ts)能编译,而上面的却不能。
 
sion:
只是问题的重点是,ts是一个数组。为什么这个if(ts)可以编译,而上面提到的那些却不能。

表达式if(ts)意味着数组对象ts实际存在。我特别提出了语义学。

你想禁止编译此案还是警告就够了?(顺便说一下,必须有一个警告。如果没有警告,那就是我们的错,有东西断了)

 

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

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它
看起来
像是在为数组的第一个单元工作。
 
#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文件名没有限制。

 
A100:

ServiceDesk不承认这个错误,提到标识符不能以数字开头。

但5Test不是一个标识符,它是一个文件名。而且文件名可以以数字开头,对#import .ex5文件名没有任何限制。

5Test::A 是一个标识符。

而且,只要这个名字在导入 句中用引号括起来,5Test就能被识别为一个文件名(顺便说一下,你在那里也写了 "5Test.ex5")。

 
这就是为什么C/C++编译器会自动在文件/模块中的函数名称的内部表示上添加下划线(_),这样结尾的名称"_5TestA "就不会以数字开头,这就保证了兼容性
 
A100:
这就是为什么C/C++编译器会自动在文件/模块中的函数名称的内部表示中添加一个下划线字符(_),这样产生的名称"_5TestA "就不会以数字开头,从而确保兼容性

事实证明,结果是如此。你只需要接受它。

这是一个危险的编辑位置--编译器的行为会发生很大的变化,以至于没有人会感到高兴。

 
stringo:

这是一个危险的编辑位置--编译器的行为可能被改变得很厉害,以至于没有人会满意。

我同意。

请看一下这个例子。

#define  aX( X ) (X)
void K()
{
        int aX = 10;
        Print( aX( 5 ) );
        Print( aX ); 
}
// ошибка компиляции

C/C++编译器有足够的头脑来区分aX变量和aX( X )参数宏。

在没有内联函数的情况下,参数宏是唯一的选择,而且在冗长的代码中,名称往往会出现重叠。

 
A100:

同意。

请看一下这个例子。

在类似的情况下,C/C++编译器有能力区分变量aX和参数宏aX( X )。
看治疗师!(进入服务台)
 

谢谢你!在你的帮助下,我已经明白了。