错误、漏洞、问题 - 页 2867

 
A100:
#define  TMP VALUE      // TMP = 10 VALUE

明白了,在这里有不同的解释。

这毕竟不是一个常数,而是一个宏观。

谢谢你。
 
fxsaber:

所以在行动上与MACRO和MACRO2相同。

对于终端用户来说,是的,使用一个带有两个参数的宏

 
对于有用和有害警告的问题。
#ifdef __cplusplus
class A {
    A( int  , int y ) :         //(1)
                        x( x ), //(2) warning: 'A::x' is initialized with itself
                        y( y )  //(3)
                    {}
    int x, y;
};
#endif

一个聪明的Shell C++编译器是做什么的?对了!第(1)行有一个明显的错别字--缺少'x'。

    A( int x, int y ) :

- 它会产生警告:'A::x'是用自身初始化的。而在那些可以的地方,它却没有显示出任何东西!

那么MQL编译器是做什么的?

#ifdef __MQL__
class A {
    A( int  , int y ) :         //(1) warning: declaration of 'y' hides member
                        x( x ), //(2) нормально
                        y( y )  //(3)
                    {}
    int x, y;
};
#endif

当它需要它并且有一个明显的错误打印时,它是沉默的,但当它不需要它并且一切正常时,它警告说:'y'的声明隐藏了成员。

为什么反过来了呢?
 

2632

当在视觉测试 中暂停时,不可能用鼠标拖动或方向键来浏览(倒退/前进)图表。

 

我看到关于宏的话题已经开始了,我也有一些问题

为什么在C和D中使用int和uint?
long和ulong应该在哪里被替换
,或者说编译器很聪明,它能感知280的大小并进行优化?

#define  A 280    // int
#define  B 280 U   // unsigned int
#define  C 280L   // long
#define  D 280LU  // unsigned long
#define  K 28.0   // double

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(A));
   Print(typename(B));
   Print(typename(C));
   Print(typename(D));   
   Print(typename(K));
}
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  int
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  uint
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  int
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  uint
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  double


第二个问题。
为什么float会出现编译错误

#define  L 28.0 F  // float

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(L));
}
'TestScript.mq5'                TestScript.mq5  1       1
'F' - undeclared identifier     TestScript.mq5  36      19
'F' - some operator expected    TestScript.mq5  36      19
2 errors, 0 warnings                            3       1


第三个问题。

#define  E '\n'         // char
#define F B'111111111' // int
#define  J ""           // string

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(E));
   Print(typename(F));
   Print(typename(J));
}
2020.10.07 04:55:00.406 TestScript (EURUSD,M1)  ushort
2020.10.07 05:41:01.204	TestScript (EURUSD,M1)	uint
2020.10.07 04:55:00.406 TestScript (EURUSD,M1)  string
 
Roman:

我看到关于宏的话题已经开始了,我也有一些问题

为什么在C和D中使用int和uint?
long和ulong应该在哪里替换
,或者说编译器很聪明,它能感应到280的大小并进行优化?


第二个问题。
为什么float会出现编译错误


第三个问题。

1.L是长的,但C++。试试LL
2. f
3 '\n' 是char
 
Vladimir Simakov:
1.L是长的,但C++。试试LL。
2. f
3 '\n' 是char。

是的,这很有效。
但是,字符类型'+'显示为ushort
Fits作为2字节的字符串大小。

#define A 280          // int
#define B 280 U         // unsigned int
#define C 280 LL        // long
#define D 280 LLU       // unsigned long
#define E 28.0         // double
#define F 28.0 f        // float
#define J '+'          // char
#define K B'111111111' // int

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(A));
   Print(typename(B));
   Print(typename(C));
   Print(typename(D));   
   Print(typename(E));
   Print(typename(F));
   Print(typename(J));
   Print(typename(K));
}
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  int
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  uint
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  long
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  ulong
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  double
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  float
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  ushort
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  uint
 
Roman:

是的,它成功了。
但字符类型'+'显示为短语
它将其设置为2字节的字符串大小

它为什么要这样做?

这是一个错误还是一个错误还是什么?

 
Vladimir Simakov:

为什么会这样呢?

这是一个错误还是一个特点?

我不知道。
也许是Unicode的原因?

 
Roman:

谁知道呢。
也许是Unicode的原因?

不,开发者的逻辑是可以理解的,但对我来说,我宁愿在需要时明确指定u'y'。