エラー、バグ、質問 - ページ 2867

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

なるほど、ここでの解釈は違うんですね。

やはり定数ではなく、マクロなんですね。

ありがとうございます。
 
fxsaber:

そのため、MACROやMACRO2と動作が同じです。

エンドユーザーにとっては、そう、2つのパラメータを持つ1つのマクロが使用されます。

 
有用な警告と有害な警告についての質問へ。
#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

スマートシェルC++コンパイラは何をするのですか?そうなんだ!明らかな誤植がある場合、および(1)行目の「x」が抜けている場合

    A( int x, int y ) :

- という警告が発生 します。しかも、OKのところでは何も表示されません!?

また、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


2つ目の質問です。
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


3つ目の質問です。

#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のサイズを感知して最適化するのでしょうか?


2つ目の質問です。
floatのコンパイルエラーは なぜですか?


3つ目の質問です。

1.Lは長いけど、c++。LLを試す
2. f
3 '\n' is char
 
Vladimir Simakov:
1.Lは長いけど、c++。LLを試してみてください。
2. f
3 '˶'ᴗ'˶はcharです。

はい、使えます。
しかし、文字型'+'は、2バイトの文字列サイズとしてushort
Fitsを表示します。

#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:

はい、成功しました。
しかし、文字型 '+' は ushort を示します。
これは、2バイトの文字列サイズとして設定 されます。

なぜ、そんなことをするのでしょうか?

バグなのか、虫なのか、なんなのか。

 
Vladimir Simakov:

なぜ、そんなふうになるのでしょうか。

欠点というか、バグというか、そういうものがあるのでしょうか?

どうだろう。
もしかして、ユニコードのせい?

 
Roman:

誰にもわからない。
もしかして、ユニコードのせい?

いや、開発者の論理は理解できるが、私としては、必要なときに必要なだけu'y'を明示的に指定したい。