A la question sur les avertissements utiles et nuisibles :
#ifdef __cplusplus
class A {
A( int , int y ) : //(1)
x( x ), //(2)warning: 'A::x' is initialized with itself
y( y ) //(3)
{}
int x, y;
};
#endif
Que fait un compilateur Shell C++ intelligent ? C'est ça ! En cas de faute d'impression manifeste et à la ligne (1) - le "x" manquant.
A( int x, int y ) :
- il génère l'avertissement suivant : 'A::x' est initialisé avec lui-même. Et il ne montre rien dans les endroits où il est correct !
Et que fait le compilateur MQL ?
#ifdef __MQL__class A {
A( int , int y ) : //(1) warning: declaration of 'y' hides member
x( x ), //(2) нормально
y( y ) //(3)
{}
int x, y;
};
#endif
Il est silencieux lorsqu'il en a besoin et qu'il y a une erreur d'impression évidente, mais lorsqu'il n'en a pas besoin et que tout va bien, il avertit : la déclaration de 'y' cache un membre.
Lorsqu'il est en pause dans le test visuel, il n'est pas possible de parcourir (rembobiner/avancer) le graphique en utilisant la souris ou les touches fléchées.
Je vois que le sujet des macros a pris de l'ampleur, j'ai aussi quelques questions.
Pourquoi int et uint sont utilisés pour C et D ? Où faut-il substituer long et ulong ou peut-être le compilateur est-il si intelligent qu'il détecte la taille 280 et l'optimise ?
#define A 280// int#define B 280 U // unsigned int#define C 280L// long#define D 280LU// unsigned long#define K 28.0// double//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
Print(typename(A));
Print(typename(B));
Print(typename(C));
Print(typename(D));
Print(typename(K));
}
#define L 28.0 F // float//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
Print(typename(L));
}
Je vois que le sujet des macros a pris de l'ampleur, j'ai aussi quelques questions.
Pourquoi int et uint sont utilisés pour C et D ? Où faut-il substituer long et ulong ou peut-être le compilateur est-il si intelligent qu'il détecte la taille 280 et l'optimise ?
Vladimir Simakov: 1. L est long, mais c++. Essayez LL.
2. f
3 "\n" est un caractère.
Oui. Ça marche. Mais le type de caractère '+' nous indique que Fits est une chaîne de caractères de 2 octets.
#define A 280// int#define B 280 U // unsigned int#define C 280 LL // long#define D 280 LLU // unsigned long#define E 28.0// double#define F 28.0 f // float#define J '+'// char#define K B'111111111'// int//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart()
{
Print(typename(A));
Print(typename(B));
Print(typename(C));
Print(typename(D));
Print(typename(E));
Print(typename(F));
Print(typename(J));
Print(typename(K));
}
Vladimir Simakov: Non, la logique des développeurs est compréhensible, mais pour ma part, je préfère spécifier moi-même u'y' explicitement, quand et si j'en ai besoin
Il n'est pas clair comment le type de char est vaincu.
Donc identique en action à MACRO et MACRO2.
Pour l'utilisateur final, oui, une seule macro avec deux paramètres est utilisée
Que fait un compilateur Shell C++ intelligent ? C'est ça ! En cas de faute d'impression manifeste et à la ligne (1) - le "x" manquant.
- il génère l'avertissement suivant : 'A::x' est initialisé avec lui-même. Et il ne montre rien dans les endroits où il est correct !
Et que fait le compilateur MQL ?
Il est silencieux lorsqu'il en a besoin et qu'il y a une erreur d'impression évidente, mais lorsqu'il n'en a pas besoin et que tout va bien, il avertit : la déclaration de 'y' cache un membre.
Pourquoi est-ce l'inverse ?2632
Lorsqu'il est en pause dans le test visuel, il n'est pas possible de parcourir (rembobiner/avancer) le graphique en utilisant la souris ou les touches fléchées.
Je vois que le sujet des macros a pris de l'ampleur, j'ai aussi quelques questions.
Pourquoi int et uint sont utilisés pour C et D ?
Où faut-il substituer long et ulong
ou peut-être le compilateur est-il si intelligent qu'il détecte la taille 280 et l'optimise ?
La deuxième question.
Pourquoi y a-t-il une erreur de compilation pour float ?
La troisième question.
Je vois que le sujet des macros a pris de l'ampleur, j'ai aussi quelques questions.
Pourquoi int et uint sont utilisés pour C et D ?
Où faut-il substituer long et ulong
ou peut-être le compilateur est-il si intelligent qu'il détecte la taille 280 et l'optimise ?
La deuxième question.
Pourquoi y a-t-il une erreur de compilation pour float ?
La troisième question.
1. L est long, mais c++. Essayez LL.
Oui. Ça marche.
Mais le type de caractère '+' nous indique que
Fits est une chaîne de caractères de 2 octets.
Oui. Ça a marché.
Mais le type de caractère '+' est court
. Il est défini comme une taille de chaîne de 2 octets.
Pourquoi ferait-il ça ?
C'est un bug ou une anomalie ?
Pourquoi est-ce que c'est comme ça ?
Est-ce un bug ou une fonctionnalité ?
Je ne sais pas.
C'est peut-être l'Unicode ?
Qui sait ?
C'est peut-être l'Unicode ?
Non, la logique des développeurs est compréhensible, mais pour ma part, je préfère spécifier moi-même u'y' explicitement, quand et si j'en ai besoin
Il n'est pas clair comment le type de char est vaincu.