Ошибки, баги, вопросы - страница 1003
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ts==true и ts!=NULL - это совершенно разные выражения.
Более того
ts==true и ts!=false - это тоже разные выражения
А знаете, чем они разные? Не только по синтаксису, но и по семантике
Только суть вопроса был, то что ts это массив. И почему это if(ts) компилится, а вышеперечисленное нет.
Выражение if(ts) означает, что объект массива ts реально существует. Я специально про семантику заговорил.
Вы хотите запретить компиляцию этого случая или достаточно предупреждения? (Кстати, предупреждение должно быть. Если его нет, то это - наша недоработка, что-то отломали)
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
stringo, 2013.06.17 06:35
Выражение if(ts) означает, что объект массива ts реально существует. Я специально про семантику заговорил.
Вы хотите запретить компиляцию этого случая или достаточно предупреждения? (Кстати, предупреждение должно быть. Если его нет, то это - наша недоработка, что-то отломали)
void OnInit()
{
ts[0]=0;ts[1]=1;
if(ts)Print("ts[0]=0");
ts[0]=1;
if(ts)Print("ts[0]=1");
}
void OnTick()
{
}
СервисДеск ошибку не признает, ссылаясь на то, что идентификаторы не могут начинаться с цифры.
Но 5Тест - это не идентификатор, а имя файла. А имена файлов могут начинаться с цифры и не вводились ограничения на имена #import .ex5 файлов
СервисДеск ошибку не признает, ссылаясь на то, что идентификаторы не могут начинаться с цифры.
Но 5Тест - это не идентификатор, а имя файла. А имена файлов могут начинаться с цифры и не вводились ограничения на имена #import .ex5 файлов
5Test::A - самый что ни на есть идентификатор.
А именем файла 5Test признаётся постольку поскольку это имя заключено в кавычки в предложении import (кстати, у Вас там так и написано "5Test.ex5")
Потому С/С++ компиляторы и добавляют автоматически к внутреннему представлению имени функции в файле/модуле символ подчёркивания (_), чтобы конечное имя "_5TestA" не начиналось с цифры, чем и обеспечивается совместимость
Как получилось, так и получилось. Вам остаётся смириться.
В этом месте опасно править - поведение компилятора можно так изменить, что никто не возрадуется.
В этом месте опасно править - поведение компилятора можно так изменить, что никто не возрадуется.
Согласен.
Посмотрите пожалуйста этот пример:
У С/С++ компилятора в аналогичной ситуации хватает смекалки отличить переменную aX от параметричеcкого макроса аX( X )
В отсутствии inline функций параметрические макросы единственная альтернатива, и при объемном коде имена могут часто пересекаться
Согласен.
Посмотрите пожалуйста этот пример:
У С/С++ компилятора в аналогичной ситуации хватает смекалки отличить переменную aX от параметричеcкого макроса аX( X )Конечно, только на днях опубликовали примеры:
Спасибо! Разобрался с Вашей помощью.