Je tente de modifier un simulateur MIPS pour afficher le contenu de ses registres pendant l'exécution. Ma question concerne la façon dont je prévois de faire cela. Donc ...Utilisation de variables publiques globales
J'ai un fichier, fichier1.cpp et fichier2.cpp. Il y a une variable publique locale dans file1.cpp appelé
typedef long ValueGPR;
ValueGPR reg[33];
que je veux accéder à file2.cpp. Chacun de ces fichiers contient un fichier d'en-tête. File2.cpp contient une fonction qui suit de façon itérative l'exécution d'une instruction de programme par une instruction en faisant l'endroit idéal pour insérer un printf ("REG [% d]:% d \ n", i, reg [i]); déclaration ou quelque chose comme ça, mais reg est une variable locale dans file1.cpp. Comment assembler quelque chose qui me permettra d'accéder à cette variable reg?
C'est ce que les deux fichiers ressemblent vraiment (après avoir réfléchi à cela un peu plus): "File1.h"
typedef long ValueGPR;
...
class ThreadContext {
...
public:
ValueGPR reg[33];
...
...
}
...
"File2.cpp"
...
#include ".../ThreadContext.h"
...
long ExecutionFlow::exeInst(void) {
...
//ADD PRINTF OF reg[1] - reg[32] HERE
...
}
...
Woops, j'ai foiré ma description ... Donc, reg est utilisé dans fichier1.cpp mais il est défini de la manière suivante dans fichier1.h: 'typedef long ValeurGPR; public: ValueGPR reg [33]; ' –
Donc, si c'est le cas, puis-je remplacer public: ValueGPR reg [33]; avec extern ValueGPR reg [33] ;? –
@Dan: Si 'reg' est un membre d'une classe (ce qui semble être le résultat de vos commentaires), alors le changer en global serait une mauvaise idée - vous aurez un comportement incorrect si vous en avez plus d'un instance de la classe. Au lieu de cela, vous devriez trouver un moyen de passer soit 'reg', soit l'objet qui le contient, en référence à la fonction dans' file2.cpp' qui veut y accéder. –