Ошибки, баги, вопросы - страница 1003

 
stringo:

ts==true и ts!=NULL - это совершенно разные выражения.

Более того

ts==true и ts!=false - это тоже разные выражения

А знаете, чем они разные? Не только по синтаксису, но и по семантике

Только суть вопроса был, то что ts это массив. И почему это if(ts) компилится, а вышеперечисленное нет.
 
sion:
Только суть вопроса был, то что ts это массив. И почему это if(ts) компилится, а вышеперечисленное нет.

Выражение if(ts) означает, что объект массива ts реально существует. Я специально про семантику заговорил.

Вы хотите запретить компиляцию этого случая или достаточно предупреждения? (Кстати, предупреждение должно быть. Если его нет, то это - наша недоработка, что-то отломали)

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

stringo, 2013.06.17 06:35

Выражение if(ts) означает, что объект массива ts реально существует. Я специально про семантику заговорил.

Вы хотите запретить компиляцию этого случая или достаточно предупреждения? (Кстати, предупреждение должно быть. Если его нет, то это - наша недоработка, что-то отломали)


int ts[20];

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()
{

}

2013.06.17 08:41:31 test_forum (EURUSD.e,M15) ts[0]=1
Больше похоже, что он работает с первой ячейкой массива.
 
#import "Test.ex5"
   void A();
#import "5Test.ex5"
   void A();
#import "Test5.ex5"
   void A();
#import

void B() { Test::A(); } //нормально
void C() { Test5::A(); } //нормально
void D() { 5Test::A(); } //ошибка компиляции

СервисДеск ошибку не признает, ссылаясь на то, что идентификаторы не могут начинаться с цифры.

Но 5Тест - это не идентификатор, а имя файла. А имена файлов могут начинаться с цифры и не вводились ограничения на имена #import .ex5 файлов

 
A100:

СервисДеск ошибку не признает, ссылаясь на то, что идентификаторы не могут начинаться с цифры.

Но 5Тест - это не идентификатор, а имя файла. А имена файлов могут начинаться с цифры и не вводились ограничения на имена #import .ex5 файлов

5Test::A - самый что ни на есть идентификатор.

А именем файла 5Test признаётся постольку поскольку это имя заключено в кавычки в предложении import (кстати, у Вас там так и написано "5Test.ex5")

 
Потому С/С++ компиляторы и добавляют автоматически к внутреннему представлению имени функции в файле/модуле символ подчёркивания (_), чтобы конечное имя "_5TestA" не начиналось с цифры, чем и обеспечивается совместимость
 
A100:
Потому С/С++ компиляторы и добавляют автоматически к внутреннему представлению имени функции в файле/модуле символ подчёркивания (_), чтобы конечное имя "_5TestA" не начиналось с цифры, чем и обеспечивается совместимость

Как получилось, так и получилось. Вам остаётся смириться.

В этом месте опасно править - поведение компилятора можно так изменить, что никто не возрадуется.

 
stringo:

В этом месте опасно править - поведение компилятора можно так изменить, что никто не возрадуется.

Согласен.

Посмотрите пожалуйста этот пример:

#define aX( X ) (X)
void K()
{
        int aX = 10;
        Print( aX( 5 ) );
        Print( aX ); 
}
// ошибка компиляции

У С/С++ компилятора в аналогичной ситуации хватает смекалки отличить переменную aX от параметричеcкого макроса аX( X ) 

В отсутствии inline функций параметрические макросы единственная альтернатива, и при объемном коде имена могут часто пересекаться

 
A100:

Согласен.

Посмотрите пожалуйста этот пример:

У С/С++ компилятора в аналогичной ситуации хватает смекалки отличить переменную aX от параметричеcкого макроса аX( X ) 
К терапевту! (в сервисдеск)
 
Rosh:

Конечно, только на днях опубликовали примеры:

  1. Demo_IndicatorSetInteger
  2. Demo_IndicatorSetDouble
  3. Demo_IndicatorSetString

Спасибо! Разобрался с Вашей помощью.

Причина обращения: