Je travaille actuellement sur un projet déjà développé écrit dans MFC C++ et je suis confronté à un problème avec une macro déjà présente avec la définition:
#define HEIGHT_TESTS 13
J'essaie de changer la valeur de l'intérieur du code, mais je pense que depuis sa définition prétraitée, je suis incapable de le faire. Existe-t-il un moyen de contourner ce problème sans avoir à modifier l'ensemble de la macro originale (car cela pourrait affecter la fonctionnalité d'origine du programme). Je n'ai que l'intention de le changer en une condition particulière, reposez-vous partout où il reste le même.
Juste pour que tout le monde sache, j'ai évidemment essayé d'utiliser une définition macro différente avec la valeur (17) que j'ai l'intention d'utiliser, mais pas de chance en tant que telle.
Toute aide serait très appréciée.
Vous pouvez undef
ine it et define
à nouveau:
#include <iostream>
#define AAA 13
int main()
{
#undef AAA
#define AAA 7
std::cout << AAA;
}
sorties: 7
Veuillez noter que les instructions commençant par #
Sont directives de préprocesseur qui sont pris en charge avant même que le code soit même compilé. Dans ce cas, cette constante AAA
sera simplement remplacée par 7
, C'est-à-dire comme un remplacement textuel sans vérification supplémentaire de syntaxe, sans type de sécurité, etc.
... qui est la principale raison pour laquelle vous devriez éviter d'utiliser des macros et #define
S où ils peuvent être remplacés par des fonctions statiques et des variables :)
Pourquoi "remplacement textuel" ?
Regardez ce code:
#include <iostream>
#define AAA 13
void purePrint() {
std::cout << AAA;
}
void redefAndPrint() {
#undef AAA
#define AAA 7
std::cout << AAA;
}
int main()
{
#undef AAA
#define AAA 4
purePrint();
redefAndPrint();
purePrint();
}
le préprocesseur va ligne par ligne de haut en bas, ce faisant cela:
#define AAA 13
, alors quand je frappe AAA
la prochaine fois, je vais y installer 13
AAA
, je le remplace par 13
7
, donc je vais arrêter d'utiliser 13
redefAndPrint()
je vais y installer 7
transformer le code donné dans celui-ci:
#include <iostream>
void purePrint() {
std::cout << 13;
}
void redefAndPrint() {
std::cout << 7;
}
int main()
{
purePrint();
redefAndPrint();
purePrint();
}
qui va sortir 13713
et le dernier #define AAA 4
Ne sera utilisé pas du tout.
Quelque chose comme ce qui suit:
#undef HEIGHT_TESTS
#define HEIGHT_TESTS 17
// Use redefined macro
// Restore
#undef HEIGHT_TESTS
#define HEIGHT_TESTS 13
#define a 2
#define B (A + 3)
#define c (B + 4)
// Je veux ici pour changer la valeur de A - possible?
#define A (C + 6)