Fehler, Irrtümer, Fragen - Seite 1003

 
stringo:

ts==true und ts!=NULL sind völlig unterschiedliche Ausdrücke.

Außerdem

ts==true und ts!=false sind ebenfalls unterschiedliche Ausdrücke

Wissen Sie, wie sie sich unterscheiden? Nicht nur in der Syntax, sondern auch in der Semantik.

Aber die Frage zielte darauf ab, dass ts ein Array ist. Und warum dieses if(ts) kompiliert und das obige nicht.
 
sion:
Die Frage zielte nur darauf ab, dass ts ein Array ist. Und warum wird dieses if(ts) kompiliert und die oben genannten nicht.

Der Ausdruck if(ts) bedeutet, dass das Array-Objekt ts tatsächlich existiert. Ich habe ausdrücklich die Semantik angesprochen.

Wollen Sie die Zusammenstellung dieses Falles verbieten oder reicht eine Warnung aus? (Übrigens, es muss eine Warnung ausgesprochen werden. Wenn es keine Warnung gibt, ist es unsere Schuld, etwas ist abgebrochen)

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

stringo, 2013.06.17 06:35

Der Ausdruck If(ts) bedeutet, dass das Array-Objekt ts tatsächlich existiert. Ich habe ausdrücklich von Semantik gesprochen.

Wollen Sie die Zusammenstellung dieses Falles verbieten oder reicht eine Warnung? (Übrigens, es sollte eine Warnung geben. Wenn es keine Warnung gibt, ist es unsere Schuld, etwas ist kaputt)


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]=1Es
sieht
eher
so aus, als würde es mit der ersten Zelle des Arrays funktionieren.
 
#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 erkennt den Fehler nicht an und verweist auf die Tatsache, dass Kennungen nicht mit einer Zahl beginnen können.

Aber 5Test ist kein Bezeichner, sondern ein Dateiname. Und Dateinamen können mit einer Ziffer beginnen, und für #import .ex5-Dateinamen gibt es keine Einschränkungen.

 
A100:

ServiceDesk erkennt den Fehler nicht an und verweist auf die Tatsache, dass Kennungen nicht mit einer Zahl beginnen können.

Aber 5Test ist kein Bezeichner, sondern ein Dateiname. Und Dateinamen können mit einer Ziffer beginnen, und für #import .ex5-Dateinamen wurden keine Einschränkungen festgelegt

5Test::A ist ein Bezeichner.

Und 5Test wird als Dateiname erkannt, solange dieser Name im Importsatz in Anführungszeichen gesetzt wird (Sie haben dort übrigens auch "5Test.ex5" stehen).

 
Aus diesem Grund fügen C/C++-Compiler automatisch einen Unterstrich (_) an die interne Darstellung des Funktionsnamens in der Datei/im Modul an, so dass der Name mit der Endung "_5TestA" nicht mit einer Zahl beginnt, was die Kompatibilität gewährleistet
 
A100:
Deshalb fügen C/C++-Compiler automatisch einen Unterstrich (_) an die interne Darstellung des Funktionsnamens in einer Datei/einem Modul an, so dass der resultierende Name "_5TestA" nicht mit einer Zahl beginnt, was die Kompatibilität gewährleistet

Wie sich herausstellte, war das auch der Fall. Sie müssen es einfach akzeptieren.

Dies ist eine gefährliche Stelle zum Editieren - das Verhalten des Compilers kann sich so stark ändern, dass niemand zufrieden sein wird.

 
stringo:

Dies ist eine gefährliche Stelle zum Editieren - das Verhalten des Compilers kann so stark verändert werden, dass niemand damit zufrieden ist.

Ich stimme zu.

Bitte sehen Sie sich dieses Beispiel an:

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

Der C/C++-Compiler hat genug Grips, um die Variable aX von dem parametrischen Makro aX( X ) zu unterscheiden.

Parametrische Makros sind die einzige Alternative, da es keine Inline-Funktionen gibt und sich die Namen in langem Code oft überschneiden können

 
A100:

Einverstanden.

Bitte sehen Sie sich dieses Beispiel an:

Der C/C++-Compiler hat in einer ähnlichen Situation die Fähigkeit, die Variable aX von dem parametrischen Makro aX( X ) zu unterscheiden
Suchen Sie einen Therapeuten auf! (in Servicedesk)
 
Rosh:

Sicher, ich habe neulich erst Beispiele veröffentlicht:

  1. Demo_IndikatorSetInteger
  2. Demo_IndicatorSetDouble
  3. Demo_IndicatorSetString

Ich danke Ihnen! Ich habe es mit Ihrer Hilfe herausgefunden.