收到 "empty controlled statement found" 警告 |元编辑器
Getting the "empty controlled statement found" warning | MetaEditor
我如何确保以下 if
、else if
语句遵循以下规则:
"If everything in either /*Condition 1*/
or /*Condition 2*/
is true,
then
carry on assessing /*Conditions 3 - 12*/
"
目前,我正在获取 empty controlled statement found 313 38
编译器 error/warning。
if(shiftOneClose < shiftOneOpen){ /*Condition 1*/
if((bearHammer / (shiftOneOpen - shiftOneLow) <= OoTMax))
if((bearHammer / bullNail) <= OoTMax)
if(bearHammer >= Transform(PCM,2)); /*Line 313*/
}
else if(shiftOneClose > shiftOneOpen){ /*Condition 2*/
if((bullHammer / (shiftOneClose - shiftOneLow) <= OoTMax))
if((bullHammer / bullNail) <= OoTMax)
if(bullHammer >= Transform(PCM,2));
}
if.... /*Conditions 3 - 12*/
if....
if....
if....
if....
if....
if....
if....
if....
if....
{
[execute trade]
}
您可以使用通用控制结构,然后使用其他编程语言,如 C++,JAVA。
如果你不熟悉:
&&
这表示 and
||
这意味着 or
示例:
//--- so in order to make it evaluate conditions 3-12, if only condition 1 or 2 is true
if(condition1 || condition2){
if(condition3 && condition4){ /* so on until 12 */
//--- execute trade
}
}
为了提高代码的可读性建议你将部分条件移到函数中
Q : "How would I ensure that the following if
,else if
statement follows the following rule:
"If everything in either /*Condition 1*/
or /*Condition 2*/
is true,
then carry on assessing /*Conditions 3 - 12*/
""
原始代码在 line 313
中爆炸了,因为 ;
字符终止了 statement-constructor,而如果满足 if(){...}else{...}
-ed 条件中的任何一个,则没有什么可“执行”的(同样的问题出现在 else{...}
部分,其中也是 none {...}
-code-block 存在并且 formal-statement 构造函数变得恐慌,不知道在任何 if(){...}else{...}
分支中“执行”什么,因为语句在形式上是不完整的)。
if ( shiftOneClose < shiftOneOpen ) /*Condition 1*/
{
if ( ( bearHammer / ( shiftOneOpen - shiftOneLow ) <= OoTMax ) )
if ( ( bearHammer / bullNail ) <= OoTMax )
if ( bearHammer >= Transform( PCM, 2 ) ); /*Line 313*/
}
所以,不告诉满足条件时该怎么做是上面的根本问题。
“我如何确保...”的解决方案 部分:
句法正确的是这个解释性 logic-preserving 代码模板:
if ( ( ( shiftOneClose < shiftOneOpen
&& OoTMax >= ( bearHammer / ( shiftOneOpen - shiftOneLow ) )
&& OoTMax >= ( bearHammer / bullNail )
&& Transform( PCM, 2 ) <= bearHammer
) /*--------------------------------------------------------------------- Condition 1 */
|| ( shiftOneClose > shiftOneOpen
&& OoTMax >= ( bullHammer / ( shiftOneClose - shiftOneLow ) )
&& OoTMax >= ( bullHammer / bullNail )
&& Transform( PCM, 2 ) <= bullHammer
) /*---------------------------------------------------------------- .OR. Condition 2 */
)
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 3 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 4 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 5 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 6 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 7 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 8 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 9 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition A */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition B */
)
{...} /*---------------------------------- CODE-BLOCK TO EXECUTE ------------------------------*/
在我 ~ 20 多年的 Quant 建模中,我们总是更喜欢 wide-layout(屏幕很便宜,而且有 4 x 2 和更大的 multi-screen 座位很容易也很常见比最近十年),强调逻辑,然后减少 dup-es 计算(最好 pre-computing 任何和所有逻辑-"control-values" 然后 re-used并且由于 low-latency (通常是超 low-latency )的原因,我们从来没有花费任何额外的时间来调用函数( context-switching 的开销并在那里传递参数并返回结果)。并非所有由于 laws-of-logic,编译器(版本)做了 short-cutting 执行分支,所以这里必须小心(最昂贵的功能是那些 manipulate/query db.POOL
-存储与交易'数据,首先必须进行 db.POOL
-pointer 操作,然后 & 只有然后(在成功时,否则不会)re-access db.POOL
-record 的数据项,成本非常高).
还应该注意到有一个合乎逻辑的 blind-spot -- shiftOneClose == shiftOneOpen
.
我如何确保以下 if
、else if
语句遵循以下规则:
"If everything in either
/*Condition 1*/
or/*Condition 2*/
is true,
then
carry on assessing/*Conditions 3 - 12*/
"
目前,我正在获取 empty controlled statement found 313 38
编译器 error/warning。
if(shiftOneClose < shiftOneOpen){ /*Condition 1*/
if((bearHammer / (shiftOneOpen - shiftOneLow) <= OoTMax))
if((bearHammer / bullNail) <= OoTMax)
if(bearHammer >= Transform(PCM,2)); /*Line 313*/
}
else if(shiftOneClose > shiftOneOpen){ /*Condition 2*/
if((bullHammer / (shiftOneClose - shiftOneLow) <= OoTMax))
if((bullHammer / bullNail) <= OoTMax)
if(bullHammer >= Transform(PCM,2));
}
if.... /*Conditions 3 - 12*/
if....
if....
if....
if....
if....
if....
if....
if....
if....
{
[execute trade]
}
您可以使用通用控制结构,然后使用其他编程语言,如 C++,JAVA。
如果你不熟悉:
&&
这表示 and
||
这意味着 or
示例:
//--- so in order to make it evaluate conditions 3-12, if only condition 1 or 2 is true
if(condition1 || condition2){
if(condition3 && condition4){ /* so on until 12 */
//--- execute trade
}
}
为了提高代码的可读性建议你将部分条件移到函数中
Q : "How would I ensure that the following
if
,else if
statement follows the following rule:
"If everything in either/*Condition 1*/
or/*Condition 2*/
is true,
then carry on assessing/*Conditions 3 - 12*/
""
原始代码在 line 313
中爆炸了,因为 ;
字符终止了 statement-constructor,而如果满足 if(){...}else{...}
-ed 条件中的任何一个,则没有什么可“执行”的(同样的问题出现在 else{...}
部分,其中也是 none {...}
-code-block 存在并且 formal-statement 构造函数变得恐慌,不知道在任何 if(){...}else{...}
分支中“执行”什么,因为语句在形式上是不完整的)。
if ( shiftOneClose < shiftOneOpen ) /*Condition 1*/
{
if ( ( bearHammer / ( shiftOneOpen - shiftOneLow ) <= OoTMax ) )
if ( ( bearHammer / bullNail ) <= OoTMax )
if ( bearHammer >= Transform( PCM, 2 ) ); /*Line 313*/
}
所以,不告诉满足条件时该怎么做是上面的根本问题。
“我如何确保...”的解决方案 部分:
句法正确的是这个解释性 logic-preserving 代码模板:
if ( ( ( shiftOneClose < shiftOneOpen
&& OoTMax >= ( bearHammer / ( shiftOneOpen - shiftOneLow ) )
&& OoTMax >= ( bearHammer / bullNail )
&& Transform( PCM, 2 ) <= bearHammer
) /*--------------------------------------------------------------------- Condition 1 */
|| ( shiftOneClose > shiftOneOpen
&& OoTMax >= ( bullHammer / ( shiftOneClose - shiftOneLow ) )
&& OoTMax >= ( bullHammer / bullNail )
&& Transform( PCM, 2 ) <= bullHammer
) /*---------------------------------------------------------------- .OR. Condition 2 */
)
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 3 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 4 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 5 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 6 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 7 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 8 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 9 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition A */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition B */
)
{...} /*---------------------------------- CODE-BLOCK TO EXECUTE ------------------------------*/
在我 ~ 20 多年的 Quant 建模中,我们总是更喜欢 wide-layout(屏幕很便宜,而且有 4 x 2 和更大的 multi-screen 座位很容易也很常见比最近十年),强调逻辑,然后减少 dup-es 计算(最好 pre-computing 任何和所有逻辑-"control-values" 然后 re-used并且由于 low-latency (通常是超 low-latency )的原因,我们从来没有花费任何额外的时间来调用函数( context-switching 的开销并在那里传递参数并返回结果)。并非所有由于 laws-of-logic,编译器(版本)做了 short-cutting 执行分支,所以这里必须小心(最昂贵的功能是那些 manipulate/query db.POOL
-存储与交易'数据,首先必须进行 db.POOL
-pointer 操作,然后 & 只有然后(在成功时,否则不会)re-access db.POOL
-record 的数据项,成本非常高).
还应该注意到有一个合乎逻辑的 blind-spot -- shiftOneClose == shiftOneOpen
.