오류, 버그, 질문 - 페이지 2520

 

그리고 오류가 없습니다

Это_новая_форма_комментария;
void OnStart () {}
 

컴파일 중 오류

 void f() {} //Error: 'f' - function must have a body
void f();
void OnStart ()
{
        f();
}

그래서:

 void f() {}
void OnStart ()
{
        f();
}

좋아. 차이점이 뭐야?

또한 C ++에서는 한 번에 정상적으로 컴파일됩니다.

 #ifdef __cplusplus
void f( int ) {}   //была функция
//...
void f( int = 1 ); //уточнили параметры по умолчанию
void OnStart ()
{
        f();       / /вызвали
}
#endif
 
그리고 컴파일 오류가 없습니다 ... 남은 것은 결과를 추측하는 것뿐입니다.
 int f( int     ) { return 1 ; }
//...
int f( int = 2 );
int f( int     ) { return 3; }
void OnStart ()
{
         Print ( f( 0 ));
}
 

컴파일 시 이상한 경고

 //lib.mqh //объявления
void f(); //Warning: no #import declaration
 //lib.mq5 //реализация
void f() {}
 //Test1.mq5 //собираем все вместе
#include "lib.mqh"
#include "lib.mq5"
void OnStart () { f(); }

그래서:

 //Test2.mq5
void f();
void f() {}
void OnStart () { f(); }

모든 것이 정상입니다. 경고가 없습니다. 차이점이 뭐야?

 
A100 :

컴파일 시 이상한 경고

 //lib.mqh //объявления
int f(); //Warning: no #import declaration

//lib.mq5 //реализация
void f() {}
int 유형에 오타가 있는 것 같은데요?
 
Alexey Navoykov :
int 유형 을 사용하면 오타가 있을 수 있습니다.

예... void의 모든 곳에서 수정되었습니다.

다른 한편으로 이것은 또한 의미가 있지만 이미 경고(*)가 명확하지 않습니다.

 //lib.h //объявления
int g();   //Warning: no #import declaration //(*)
void f(); //Warning: no #import declaration
lib.h는 선언이 있는 공통 파일이고 lib.mq5, lib2.mq5, lib3.mq5... 구현이 있는 파일은 필요에 따라 #include를 통해 포함됩니다. 따라서 특정 어셈블리에서 int g() 구현이 전혀 되지 않을 수 있지만 이해할 수 없는 경고가 있습니다. 실제로 수백 가지가 있으며 실제로 중요한 경고가 표시되지 않습니다.
 
A100 :

예... void의 모든 곳에서 수정되었습니다.

다른 한편으로 이것은 또한 의미가 있지만 이미 경고(*)가 명확하지 않습니다.

lib.h는 선언이 있는 공통 파일이고 lib.mq5, lib2.mq5, lib3.mq5... 구현이 있는 파일은 필요에 따라 #include를 통해 포함됩니다. 따라서 특정 어셈블리에서 int g() 구현이 전혀 되지 않을 수 있지만 이해할 수 없는 경고가 있습니다. 실제로 수백 가지가 있으며 실제로 중요한 경고가 표시되지 않습니다.

네, 짜증나네요. 또한 동일한 include에 구현을 지정하더라도 경고도 팝업됩니다.

 

다음 오류는 특별한 주의가 필요합니다.

 //lib1.mqh
void f(); //Error: 'f' - function must have a body
#include "lib.mq5"
//...
 //lib2.mqh
void f();
#include "lib.mq5"
//...
 //lib.mq5
void f() {}
 #include "lib1.mqh"
#include "lib2.mqh"
void OnStart ()
{
        f();
}

기본적으로 이것 과 유사하지만 많은 파일이 있는 경우 다소 명확하지 않고 이해하기 어렵습니다.

 
말해봐, C++에서 이걸 어떻게?
 struct A
{
   int i;
};

struct B : public A
{
   string Str;
};

void OnStart ()
{
  A a = { 0 };
  B b;
  
  b = a; 
  a = b; // OK
}
내 코드에서 이 기능을 사용할지 말지 고민했다. C++에서 작동한다면 사용하겠습니다. 아니 - 거의, 왜냐하면. 다음 빌드에서 취소될 수 있습니다.
 
초기화 경고가 없는 버그인가요?
 struct A
{
   int i;
};

struct B : public A
{
   string Str;
};

void OnStart ()
{
  A a;
  B b;
  
//  b = a; // possible use of uninitialized variable 'a'
  a = b; // OK
}