Erreurs, bugs, questions - page 1003

 
sion:
Seulement le point de la question était que ts est un tableau. Et pourquoi ce if(ts) compile-t-il alors que les autres ne le font pas ?

L'expression if(ts) signifie que l'objet tableau ts existe réellement. J'ai spécifiquement évoqué la sémantique.

Voulez-vous interdire la compilation de ce cas ou un avertissement suffira-t-il ? (Au fait, il doit y avoir un avertissement. S'il n'y a pas d'avertissement, c'est notre faute, quelque chose est cassé).

 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

stringo, 2013.06.17 06:35

L'expression If(ts) signifie que l'objet tableau ts existe réellement. J'ai spécifiquement mentionné la sémantique.

Voulez-vous interdire la compilation de ce cas ou un avertissement suffit-il ? (Au fait, il devrait y avoir un avertissement. S'il n'y a pas d'avertissement, c'est notre faute, quelque chose est cassé).


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]=1Il
semble
plutôt
que cela fonctionne avec la première cellule du tableau.
 
#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(); } //ошибка компиляции

Le ServiceDesk ne reconnaît pas l'erreur, se référant au fait que les identifiants ne peuvent pas commencer par un chiffre.

Mais 5Test n'est pas un identifiant, c'est un nom de fichier. Les noms de fichiers peuvent commencer par un chiffre et aucune restriction n'a été imposée aux noms de fichiers #import .ex5.

 
A100:

Le ServiceDesk ne reconnaît pas l'erreur, se référant au fait que les identifiants ne peuvent pas commencer par un chiffre.

Mais 5Test n'est pas un identifiant, c'est un nom de fichier. Les noms de fichiers peuvent commencer par un chiffre et aucune restriction n'a été imposée aux noms de fichiers #import .ex5.

5Test::A est un identifiant.

Et 5Test est reconnu comme un nom de fichier à condition que ce nom soit placé entre guillemets dans la phrase d'importation (d'ailleurs, vous y avez aussi écrit "5Test.ex5").

 
C'est pourquoi les compilateurs C/C++ ajoutent automatiquement un trait de soulignement (_) à la représentation interne du nom de la fonction dans le fichier/module, de sorte que le nom final "_5TestA" ne commence pas par un chiffre, ce qui garantit la compatibilité.
 
A100:
C'est pourquoi les compilateurs C/C++ ajoutent automatiquement un caractère de soulignement (_) à la représentation interne du nom de la fonction dans un fichier/module, de sorte que le nom résultant "_5TestA" ne commence pas par un chiffre, ce qui garantit la compatibilité.

Comme il s'est avéré, ainsi il s'est avéré. Tu dois juste l'accepter.

C'est un endroit dangereux à éditer - le comportement du compilateur peut tellement changer que personne ne sera satisfait.

 
stringo:

C'est un endroit dangereux à éditer - le comportement du compilateur peut être tellement modifié que personne ne sera satisfait.

Je suis d'accord.

Jetez un coup d'œil à cet exemple :

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

Le compilateur C/C++ est suffisamment intelligent pour distinguer la variable aX de la macro paramétrique aX( X ).

Les macros paramétriques sont la seule alternative en l'absence de fonctions en ligne et les noms peuvent souvent se chevaucher dans un code volumineux.

 
A100:

D'accord.

Jetez un coup d'œil à cet exemple :

Dans une situation similaire, le compilateur C/C++ a l'intelligence de distinguer la variable aX de la macro paramétrique aX( X )
Allez voir un thérapeute ! (dans le servicedesk)
 
Rosh:

Bien sûr, j'ai publié des exemples l'autre jour :

  1. Demo_IndicatorSetInteger
  2. Demo_IndicatorSetDouble
  3. Demo_IndicatorSetString

Merci ! J'ai trouvé avec ton aide.

 
ns_k:

Merci ! J'ai trouvé avec ton aide.

La situation la plus amusante est celle où vous voulez que l'un des niveaux de l'indicateur soit égal à zéro :)

Les zéros sont dupliqués et la ligne du zéro de l'indicateur semble être écrasée par les tirets du zéro de service. Peut-être y a-t-il quelque chose à penser ? Par exemple, il est possible de ne pas afficher uniquement des zéros comme valeurs indicatrices, mais n'importe quel nombre et de renvoyer le zéro.

Merci !