forked from airat77786/MQL5Book
127 lines
3.7 KiB
MQL5
127 lines
3.7 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| FuncDeclaration.mq5 |
| |||
//| Copyright 2021, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
| |||
#property copyright "Copyright 2021, MetaQuotes Ltd."
| |||
#property link "https://www.mql5.com"
| |||
#property version "1.00"
| |||
| |||
// forward declaration
| |||
int Init(const int v);
| |||
| |||
// before the forward declaration added above,
| |||
// here was the error: 'Init' - undeclared identifier
| |||
int k = Init(-1);
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Initialization wrapper with printing |
| |||
//+------------------------------------------------------------------+
| |||
int Init(const int v)
| |||
{
| |||
Print("Init: ", v);
| |||
return v;
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| FuncBy... Value/Reference demo case |
| |||
//+------------------------------------------------------------------+
| |||
void FuncByValue(int v)
| |||
{
| |||
++v;
| |||
// ... more code
| |||
}
| |||
| |||
// error
| |||
// 'FuncByValue' - function already defined and has body
| |||
/*
| |||
void FuncByValue(const int v)
| |||
{
| |||
// ++v;
| |||
}
| |||
*/
| |||
| |||
void FuncByReference(int &v)
| |||
{
| |||
++v;
| |||
}
| |||
| |||
void FuncByConstReference(const int &v)
| |||
{
| |||
// error
| |||
// ++v; // 'v' - constant cannot be modified
| |||
Print(v); // can access/read v
| |||
}
| |||
| |||
void FuncByValueDummy(int v); // declared, unused, undefined
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Transpose an array demo case |
| |||
//+------------------------------------------------------------------+
| |||
void Transpose(double &m[][2])
| |||
{
| |||
double temp = m[1][0];
| |||
m[1][0] = m[0][1];
| |||
m[0][1] = temp;
| |||
}
| |||
| |||
void TransposeVector(double &v[])
| |||
{
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Find largest value among given ones |
| |||
//+------------------------------------------------------------------+
| |||
double Largest(const double v1, const double v2 = -DBL_MAX,
| |||
const double v3 = -DBL_MAX)
| |||
{
| |||
return v1 > v2 ? (v1 > v3 ? v1 : v3) : (v2 > v3 ? v2 : v3);
| |||
}
| |||
| |||
/*
| |||
double Largest2(const double v1, const double v2 = -DBL_MAX,
| |||
const double v3) // missing default value for parameter
| |||
{
| |||
return v1 > v2 ? (v1 > v3 ? v1 : v3) : (v2 > v3 ? v2 : v3);
| |||
}
| |||
*/
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
int i = 0;
| |||
FuncByValue(i); // i can't change
| |||
Print(i); // 0
| |||
FuncByReference(i); // i can change
| |||
Print(i); // 1
| |||
FuncByConstReference(i); // i can't change, 1
| |||
| |||
const int j = 1;
| |||
// error
| |||
// 'j' - constant variable cannot be passed as reference
| |||
// FuncByReference(j);
| |||
| |||
FuncByValue(10); // ok
| |||
| |||
// error: '10' - parameter passed as reference, variable expected
| |||
// FuncByReference(10);
| |||
| |||
double a[2][2] = {{-1, 2}, {3, 0}};
| |||
Print("Before Transpose");
| |||
ArrayPrint(a);
| |||
Transpose(a);
| |||
Print("After Transpose");
| |||
ArrayPrint(a);
| |||
| |||
// error
| |||
// TransposeVector(a); // 'a' - parameter conversion not allowed
| |||
| |||
// Print(Largest()); // error: wrong parameters count
| |||
Print(Largest(1)); // ok: 1
| |||
Print(Largest(0, -2)); // ok: 0
| |||
Print(Largest(1, 2, 3)); // ok: 3
| |||
}
| |||
//+------------------------------------------------------------------+
|