Errores, fallos, preguntas - página 1003

 
stringo:

ts==true y ts!=NULL son expresiones completamente diferentes.

Además

ts==true y ts!=false son también expresiones diferentes

¿Sabes en qué se diferencian? No sólo en la sintaxis, sino también en la semántica.

Pero el punto de la pregunta era que ts es una matriz. Y por qué este if(ts) compila y el anterior no.
 
sion:
Sólo que el sentido de la pregunta era que ts es un array. Y por qué este if(ts) compila y los anteriores no.

La expresión if(ts) significa que el objeto array ts existe realmente. He sacado a relucir específicamente la semántica.

¿Quiere prohibir la recopilación de este caso o bastará con una advertencia? (Por cierto, debe haber una advertencia. Si no hay aviso, es culpa nuestra, algo se ha roto)

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

stringo, 2013.06.17 06:35

La expresión If(ts) significa que el objeto array ts existe realmente. He mencionado específicamente la semántica.

¿Quiere prohibir la recopilación de este caso o basta con una advertencia? (Por cierto, debería haber una advertencia. Si no hay aviso, es nuestra culpa, algo está roto)


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]=1Parece más
bien que está trabajando con la primera celda del array.
 
#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() { 5 Test::A(); } //ошибка компиляции

El ServiceDesk no reconoce el error, refiriéndose a que los identificadores no pueden empezar por un número.

Pero 5Test no es un identificador, es un nombre de archivo. Y los nombres de los archivos pueden empezar por un dígito y no se ha impuesto ninguna restricción a los nombres de los archivos #import .ex5

 
A100:

El ServiceDesk no reconoce el error, refiriéndose a que los identificadores no pueden empezar por un número.

Pero 5Test no es un identificador, es un nombre de archivo. Y los nombres de los archivos pueden comenzar con un dígito y no se impusieron restricciones a los nombres de los archivos #import .ex5

5Test::A es un identificador.

Y 5Test es reconocido como un nombre de archivo siempre que este nombre esté encerrado entre comillas en la sentencia de importación (por cierto, también tienes escrito "5Test.ex5").

 
Por ello, los compiladores de C/C++ añaden automáticamente un guión bajo (_) a la representación interna del nombre de la función en el archivo/módulo, de modo que el nombre final "_5TestA" no empiece por un número, lo que garantiza la compatibilidad
 
A100:
Por ello, los compiladores de C/C++ añaden automáticamente un carácter de subrayado (_) a la representación interna del nombre de la función en un archivo/módulo, de modo que el nombre resultante "_5TestA" no empiece por un número, lo que garantiza la compatibilidad

Tal como resultó, así resultó. Sólo tienes que aceptarlo.

Este es un lugar peligroso para editar - el comportamiento del compilador puede cambiar tanto que nadie estará contento.

 
stringo:

Este es un lugar peligroso para editar - el comportamiento del compilador puede cambiar tanto que nadie estará contento.

Estoy de acuerdo.

Por favor, eche un vistazo a este ejemplo:

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

El compilador C/C++ tiene suficiente cerebro para distinguir la variable aX de la macro paramétrica aX( X ).

Las macros paramétricas son la única alternativa en ausencia de funciones inline y los nombres pueden solaparse a menudo en un código largo

 
A100:

De acuerdo.

Por favor, eche un vistazo a este ejemplo:

El compilador C/C++ en una situación similar tiene el ingenio de distinguir la variable aX de la macro paramétrica aX( X )
¡Ve a un terapeuta! (en servicedesk)
 
Rosh:

Claro, acaba de publicar ejemplos el otro día:

  1. Demo_IndicatorSetInteger
  2. Demo_IndicatorSetDouble
  3. Demo_IndicatorSetString

Gracias. Lo he entendido con su ayuda.