2010-12-02 55 views
0

Est-il possible de créer un pointeur à l'aide de #define?
Quelque chose comme ceci:Création d'un pointeur à l'aide de #define

#define *HEY 

Je vais l'utiliser pour quelque chose comme ceci:

#define *HEY 2 
... 
int *s=HEY; 
+0

ce que vous entendez par « créer pointeur »? Pouvez-vous montrer comment utiliseriez-vous cela? – tenfour

+0

Pourquoi voudriez-vous faire cela même si c'était possible? – ronag

+4

Vous devriez éviter d'obscurcir le code comme ceci, car cela causerait des maux de tête sur toute la ligne. Essayez toujours de rendre votre code aussi auto-documenté que possible. – LeopardSkinPillBoxHat

Répondre

2

Non, astérisques ne sont pas autorisés dans #define noms de macro. Votre exemple de déclaration de variable ne fonctionnerait pas car il ne contient pas le texte *HEY, il contient seulement HEY, ce qui ne correspond pas au nom de la macro définie.

Quel est le but de ce code? Faire un pointeur qui pointe vers le numéro 2?

+0

c'était juste quelque chose que je faisais, je pensais utiliser #define au lieu de déclarer une variable – Ramilol

+2

#define ne crée jamais de variables. Ils nous fournissent des constantes symboliques telles que si nous faisons #define AA 2, partout où dans le code nous écrivons AA, alors que compilation, elle est remplacée par 2. Il faut garder à l'esprit que AA n'est pas une variable et donc faire quelque chose comme AA = 3; provoquera une erreur. –

+0

Il n'est donc pas logique de créer un pointeur car les pointeurs stockent les emplacements de mémoire alloués pendant l'exécution. Les valeurs de #define sont analysées avant d'exécuter le programme lorsqu'aucun emplacement de mémoire n'est disponible. –

1

Les définitions sont entièrement basées sur le remplacement de texte. Ils peuvent seulement insérer du texte partout où vous appelez le nom. Dans votre question, vous avez déjà fait deux erreurs.

Vous ne pouvez pas utiliser * au nom de la macro si vous voulez appeler une macro, vous devez appeler avec le même nom que vous avez défini ce si * aurait été légal, vous Sould avez également appelé avec exactement ce nom * HEY

Par ailleurs. Il n'y a absolument aucune fonctionnalité secrète cachée quelque part dans les définitions de macros. Il suffit de rejouer chaque HEY dans votre code source avec un 2 avant de compiler. Rien d'autre ne se passe. Vous pouvez remplacer tout ce que vous voulez remplacer, même les accolades simples si vous le souhaitez.

#define OPEN (
... 
cout << 2 * OPEN 3 + 4) << endl; 

devrait fonctionner, même si est assez inutile

+0

je sais ce qu'il fait, je dis juste au lieu de créer une variable est utilisé "# définir" – Ramilol