Erreurs, bugs, questions - page 2863

 

J'ai une question sur une énigme.

Comparez les deux photos et dites-moi quelle est l'astuce ?

1. L'Expert Advisor fonctionne sur le graphique.


2. La seconde est le même conseiller expert. Le graphique après un seul test.


 
Pouvez-vous me dire si c'est possible ?
#define  VALUE 10

#define  MACROS

#ifdef  MACROS
  // Нужно VALUE увеличить в два раза.
#endif
 
fxsaber:
Pouvez-vous me dire si c'est possible ?
#define  VALUE 10

#define  MACROS

#ifdef  MACROS
   #ifdef  VALUE
      #undef  VALUE
   #endif
   #define  VALUE 20
#endif

ou

#define  DEFAULT_VAL 10

#define  VALUE DEFAULT_VAL

#define  MACROS

#ifdef  MACROS
   #ifdef  VALUE
      #undef  VALUE
   #endif
   #define  VALUE (2*DEFAULT_VAL)
#endif
 
Vladimir Simakov:

ou

Je n'ai pas accès à la définition originale de VALUE. Sinon, bien sûr, je ferais la même option.

 
fxsaber:
Pouvez-vous me dire si c'est possible ?

Pour une raison quelconque, ça ne fonctionne pas :

#define  VALUE 10

#define  MACROS

#ifdef  MACROS
  // Нужно VALUE увеличить в два раза.
  #define  TMP VALUE
  #undef  VALUE
  #define  VALUE (TMP*2)  // Если заменить на (10*2) - компилируется!
#endif

int OnInit(void)
{
        Print( "VALUE = ", VALUE ); //'VALUE' - undeclared identifier
        return(INIT_FAILED);
}
 
Andrey Khatimlianskii:

Pour une raison quelconque, ça ne fonctionne pas :

#define  INITIAL_VALUE 10
#define  VALUE INITIAL_VALUE

#ifdef  MACROS
  #define  VALUE 2*INITIAL_VALUE
#endif
Probablement juste comme ça
 
TheXpert:
C'est probablement le seul moyen

Malheureusement, le défi n'est pas relevé.

 
Il n'est pas possible de créer un sondage dans le forum, cliquer sur créer vous ramènera à la page d'accueil.
 
TheXpert:
C'est probablement le seul moyen.

Alors pourquoi ça ne marche pas ?

@Ilyas@Slava?

 
Andrey Khatimlianskii:

Alors pourquoi ça ne marche pas ?

Le plus probable est que cette approche ne fonctionne nulle part. Parce qu'il y a une substitution en cours où la VALEUR à droite est indéfinie.

#define  VALUE (VALUE*2)
Raison: