макроподстановка - это значит что весь тот код (который в дефайне), будет подставляться каждый раз в указанное место программы. То есть фактически - вместо того чтобы сделать функцию и ее вызывать, вы эту функцию копируете внутри кода много раз, как кусок кода.
И если делаете return из макроса, то это return из всего кода, где этот макрос вставлен.
макроподстановка - это значит что весь тот код (который в дефайне), будет подставляться каждый раз в указанное место программы. То есть фактически - вместо того чтобы сделать функцию и ее вызывать, вы эту функцию копируете внутри кода много раз, как кусок кода.
И если делаете return из макроса, то это return из всего кода, где этот макрос вставлен.
Получается что написать макрофункцию не получиться.
возможно ли имя переменной преобразовать в строку?
так не работает:
#define p_func(NAME) Print("This is ##NAME")
//+------------------------------------------------------------------+voidOnStart()
{
int QWERTY;
int zxcvbn;
p_func(QWERTY);//This is ##NAME
p_func(zxcvbn);//This is ##NAME
}
Seric29: Ребята такой вопрос я хочу написать макрос makros(a), работать он будет так: если а будет равно 1це то макрос вернёт любое значение типа int, если а будет равно 2ке то макрос вернёт любое значение типа double, если а будет равно 3ке то макрос вернёт любое значение типа bool. Возможно ли так сделать?
Зачем? Для чего? Где вы его собираетесь использовать?
Seric29: Ребята такой вопрос я хочу написать макрос makros(a), работать он будет так: если а будет равно 1це то макрос вернёт любое значение типа int, если а будет равно 2ке то макрос вернёт любое значение типа double, если а будет равно 3ке то макрос вернёт любое значение типа bool. Возможно ли так сделать?
В мкл можно обойтись без GET_EXPAND, но это мкл специфичная фигня, правильней так. Ну и мкл макросы очень ограничены из-за отсутствия оператора запятая (хотя через костыли ...).
ЗЫ: ну и это всё compile time, естественно.
ЗЗЫ: кстати, если бы был оператор приведения то можно так:
class Q{
public:
operatorint();
operatordouble();
operatorbool();
};
...
Q q;
int i = q; // call operator intdouble d = q; // call operator doublebool b = q; // ...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
а разве макросы возвращают значения?
Ну вот пример кода
Ну вот пример кода
макроподстановка - это значит что весь тот код (который в дефайне), будет подставляться каждый раз в указанное место программы. То есть фактически - вместо того чтобы сделать функцию и ее вызывать, вы эту функцию копируете внутри кода много раз, как кусок кода.
И если делаете return из макроса, то это return из всего кода, где этот макрос вставлен.
макроподстановка - это значит что весь тот код (который в дефайне), будет подставляться каждый раз в указанное место программы. То есть фактически - вместо того чтобы сделать функцию и ее вызывать, вы эту функцию копируете внутри кода много раз, как кусок кода.
И если делаете return из макроса, то это return из всего кода, где этот макрос вставлен.
Получается что написать макрофункцию не получиться.
Получается что написать макрофункцию не получиться.
макроподстановка - это замена одного текста другим (в исходном коде), это не может быть функцией по определению.
Как написать 2 макроса без перехода на новую строку это очень сильно увеличивает количество строк что сильно удлинняет программу, вот пример
Макрос В уже не работает.
возможно ли имя переменной преобразовать в строку?
так не работает:
Ребята такой вопрос я хочу написать макрос makros(a), работать он будет так: если а будет равно 1це то макрос вернёт любое значение типа int, если а будет равно 2ке то макрос вернёт любое значение типа double, если а будет равно 3ке то макрос вернёт любое значение типа bool. Возможно ли так сделать?
Зачем? Для чего? Где вы его собираетесь использовать?
возможно ли имя переменной преобразовать в строку?
Ребята такой вопрос я хочу написать макрос makros(a), работать он будет так: если а будет равно 1це то макрос вернёт любое значение типа int, если а будет равно 2ке то макрос вернёт любое значение типа double, если а будет равно 3ке то макрос вернёт любое значение типа bool. Возможно ли так сделать?
В мкл можно обойтись без GET_EXPAND, но это мкл специфичная фигня, правильней так. Ну и мкл макросы очень ограничены из-за отсутствия оператора запятая (хотя через костыли ...).
ЗЫ: ну и это всё compile time, естественно.
ЗЗЫ: кстати, если бы был оператор приведения то можно так: