错误、漏洞、问题 - 页 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类型 的一个误印吧?

是的...到处都改成了无效--为了简单起见。

另一方面,其含义,但已经警告(*)不明确

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

是的...到处都改成了无效--为了简单起见。

另一方面,其含义,但已经警告(*)不明确

lib.h是一个带有声明的普通文件,而lib.mq5, lib2.mq5, lib3.mq5...文件的实现,这些文件在需要时通过#include插入。因此,在某个特定的构建中可能根本就没有int g()的实现,但晦涩的警告却在那里。实际上有数百个,它们阻碍了真正重要的警告的视野。

请注意,即使你在同一个包容书中指定了一个实现,这个警告也会弹出来。

 

以下错误值得特别注意。

//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
}