Errori, bug, domande - pagina 1003

 
stringo:

ts==vero e ts!=NULL sono espressioni completamente diverse.

Inoltre

ts==vero e ts!=falso sono anche espressioni diverse

Sapete come sono diversi? Non solo nella sintassi, ma anche nella semantica.

Ma il punto della domanda era che ts è un array. E perché questo if(ts) compila e il precedente no.
 
sion:
Solo che il punto della domanda era che ts è un array. E perché questo if(ts) si compila e i precedenti no.

L'espressione if(ts) significa che l'oggetto array ts esiste effettivamente. Ho tirato in ballo specificamente la semantica.

Volete proibire la compilazione di questo caso o basterà un avvertimento? (A proposito, ci deve essere un avvertimento. Se non c'è un avvertimento, è colpa nostra, qualcosa si è rotto)

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

stringo, 2013.06.17 06:35

L'espressione If(ts) significa che l'oggetto array ts esiste effettivamente. Ho menzionato specificamente la semantica.

Volete proibire la compilazione di questo caso o è sufficiente un avvertimento? (A proposito, dovrebbe esserci un avvertimento. Se non c'è un avvertimento, è colpa nostra, qualcosa è rotto)


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]=1Sembra piuttosto
che funzioni con la prima cella dell'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(); } //ошибка компиляции

ServiceDesk non riconosce l'errore, riferendosi al fatto che gli identificatori non possono iniziare con un numero.

Ma 5Test non è un identificatore, è un nome di file. E i nomi dei file possono iniziare con una cifra e non sono state imposte restrizioni sui nomi dei file #import .ex5

 
A100:

ServiceDesk non riconosce l'errore, riferendosi al fatto che gli identificatori non possono iniziare con un numero.

Ma 5Test non è un identificatore, è un nome di file. E i nomi dei file possono iniziare con una cifra e non sono state imposte restrizioni sui nomi dei file #import .ex5

5Test::A è un identificatore.

E 5Test è riconosciuto come nome di un file, purché questo nome sia racchiuso tra virgolette nella frase di importazione (a proposito, hai scritto anche "5Test.ex5").

 
Questo è il motivo per cui i compilatori C/C++ aggiungono automaticamente un underscore (_) alla rappresentazione interna del nome della funzione nel file/modulo, in modo che il nome finale "_5TestA" non inizi con un numero, il che assicura la compatibilità
 
A100:
Ecco perché i compilatori C/C++ aggiungono automaticamente un carattere di sottolineatura (_) alla rappresentazione interna del nome della funzione in un file/modulo, in modo che il nome risultante "_5TestA" non inizi con un numero, il che assicura la compatibilità

Come è venuto fuori, così è venuto fuori. Devi solo accettarlo.

Questo è un posto pericoloso da modificare - il comportamento del compilatore può cambiare così tanto che nessuno sarà contento.

 
stringo:

Questo è un posto pericoloso da modificare - il comportamento del compilatore può essere cambiato così tanto che nessuno sarà contento.

Sono d'accordo.

Date un'occhiata a questo esempio:

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

Il compilatore C/C++ ha abbastanza cervello per distinguere la variabile aX dalla macro parametrica aX( X ).

Le macro parametriche sono l'unica alternativa in assenza di funzioni in linea e i nomi possono spesso sovrapporsi in un codice lungo

 
A100:

D'accordo.

Date un'occhiata a questo esempio:

Il compilatore C/C++ in una situazione simile ha l'arguzia di distinguere la variabile aX dalla macro parametrica aX( X )
Vai da un terapeuta! (in servicedesk)
 
Rosh:

Certo, ho appena pubblicato degli esempi l'altro giorno:

  1. Indicatore_dimostrativoSetInteger
  2. Demo_IndicatorSetDouble
  3. Indicatore_dimostrativoSetString

Grazie! L'ho capito con il tuo aiuto.