오류, 버그, 질문 - 페이지 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

시각적 테스트 가 일시 중지되면 마우스로 드래그하거나 화살표 키를 사용하여 차트를 볼 수 없습니다(되감기/앞으로).

 

매크로의 주제가 범람한 것을 보고 저도 질문이 있습니다

int와 uint가 C와 D를 대체하는 이유는 무엇입니까?
코드는 long 및 ulong으로 대체되어야 합니다.
아니면 컴파일러가 너무 똑똑해서 차원 280을 보고 최적화합니까?

 #define A 280      // int
#define B 280 U   // unsigned int
#define C 280 L    // long
#define D 280 LU    // 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 :

매크로의 주제가 범람한 것을 보고 저도 질문이 있습니다

int와 uint가 C와 D를 대체하는 이유는 무엇입니까?
코드는 long 및 ulong으로 대체되어야 합니다.
아니면 컴파일러가 너무 똑똑해서 차원 280을 보고 최적화합니까?


두 번째 질문입니다.
float에 대한 컴파일 오류가 발생한 이유


세 번째 질문입니다.

1. L은 길지만 C++입니다. LL을 시도
2.f
3 '\n'은 문자입니다.
 
Vladimir Simakov :
1. L은 길지만 C++입니다. LL을 시도
2.f
3 '\n'은 문자입니다.

네. 그것은 효과가 있었다.
그러나 어떤 문자 유형 '+'는 ushort를 표시합니다.
문자열 크기 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 :

네. 그것은 효과가 있었다.
그러나 어떤 문자 유형 '+'는 ushort를 표시합니다.
문자열 크기 2바이트로 대체

왜 그래?

이것은 버그입니까, 아니면 기능입니까?

 
Vladimir Simakov :

그리고 왜 그렇게?

이것은 버그입니까, 아니면 기능입니까?

예, 누가 압니까?
유니코드 때문일까요?

 
Roman :

예, 누가 압니까?
유니코드 때문일까요?

아니요, 개발자의 논리 자체는 충분히 이해할 수 있지만, 저는 차라리 제가 필요할 때 u'sh'를 명시적으로 표시하고 싶습니다.