void main()
{
int xyz = 123; // original value
{ // code block starts
xyz++;
if(xyz < 1000)
xyz = 1;
} // code block ends
int original_value = xyz; // should be 123
}
void main()
{
int xyz = 123; // original value
MACRO_NAME(xyz = 123) // the macro takes the code code that should be executed at the end of the block.
{ // code block starts
xyz++;
if(xyz < 1000)
xyz = 1;
} // code block ends << how to make the macro execute the "xyz = 123" statement?
int original_value = xyz; // should be 123
}
Seul le premier main()
fonctionne.
Je pense que les commentaires expliquent le problème.MACRO C++ qui va exécuter un bloc de code et une certaine commande après ce bloc
Il n'a pas besoin d'être une macro mais pour moi, cela ressemble à un cas classique "macro-nécessaire". Au fait, il y a la macro/bibliothèque BOOST_FOREACH
et je pense que c'est exactement la même chose que j'essaie de réaliser mais c'est trop complexe pour moi de trouver l'essence de ce dont j'ai besoin.
A partir de sa page de manuel d'introduction, un exemple:
#include <string>
#include <iostream>
#include <boost/foreach.hpp>
int main()
{
std::string hello("Hello, world!");
BOOST_FOREACH(char ch, hello)
{
std::cout << ch;
}
return 0;
}
Pourquoi voulez-vous faire cela de toute façon? –
J'ai un objet qui a un pointeur. J'ai besoin de changer temporairement ce pointeur, ainsi, le renvoyer à sa valeur originale, et je voudrais être automatisé, au lieu de "oublier". Aucun destructeur n'est voulu car cet objet reçoit la fonction, et devrait être retourné comme donné. – Poni
Vous obtenez de mauvais résultats parce que vous utilisez 'void main()'. La fonction 'main' renvoie un' int', toujours. Tout le reste est un comportement indéfini. –