J'étais juste curieux de savoir s'il est possible d'avoir un pointeur faisant référence à #define constante. Si oui, comment le faire? P>
5 Réponses :
non, car Il est généralement considéré comme une bonne pratique d'utiliser des constantes au lieu de macros, en raison du fait qu'ils représentent des variables, avec leurs propres règles et types de données. Les macros sont globales et sans faille, et dans un grand programme peut facilement confondre le lecteur (puisque le lecteur ne voit pas ce qui est en réalité). P> #define code> est pour le remplacement du texte, il n'est donc pas une variable que vous pouvez obtenir un pointeur sur - ce que vous voyez est réellement remplacé par la définition du
# Définissez code> avant que le code ne soit transmis au compilateur, il n'y a donc rien à prendre l'adresse de. Si vous avez besoin de l'adresse d'une constante, définissez une variable
const code> à la place (C ++). P>
Dans ce cas, pourriez-vous s'il vous plaît expliquer comment #define diffère de const int en C ++? Je sais que les deux ne sont que des lues seulement accessibles et doivent être initialisées tout en étant construits. Y a-t-il une autre différence que le compilateur pourrait comprendre?
#define code> est littéralement comme à l'aide de la recherche / remplacement, puis de l'alimentation de votre texte au compilateur. Une variable constante est une variable régulière pendant i> (plutôt qu'auparavant) compilée (avec sa propre portée) qui a une valeur qui ne peut pas changer. Parce qu'un
#define code> macro n'est pas une variable (ce n'est que du texte qui sera remplacé par quelque chose d'autre), rien n'existe lorsque le programme est en cours d'exécution pour que vous preniez l'adresse.
Merci mais je n'ai pas assez de réputation pour vous attribuer des points. Pardon !
Haha pas de problème! Heureux cela aidé. :)
@MaHesh: Ne t'inquiète pas Mahesh; Je lui ai donné +1 au nom de vous: D
si par " #define code> définit une macro. Une macro provoque simplement une séquence de jetons à remplacer par une séquence de jetons différente. Les pointeurs et les macros sont des choses totalement distinctes. P>
#define code> constante" Vous voulez dire une macro qui s'étend sur une valeur numérique, la réponse est toujours non, car n'importe où est utilisé la macro est simplement remplacée par cette valeur. Il n'y a aucun moyen d'obtenir un pointeur, par exemple, au nombre
42 code>. p>
Le Par conséquent, si vous tapez: p>
puis plus tard, vous tapez: p>
Qu'est-ce que votre compilateur voit em> est simplement: p>
C'est fondamentalement comme si vous aviez ouvert votre code source dans un traitement de texte et que vous avez trouvé une trouvaille / remplacée pour remplacer chaque occurrence de "nombre" par "100". Donc, votre compilateur n'a aucune idée de l'existence de Donc, si vous essayez de prendre l'adresse du numéro #define code> La directive est une directive sur le Préprocesseur , ce qui signifie qu'il est invoqué par le préprocesseur avant que tout ne soit même compilé. p>
#define numéro 100 code> p>
int x = numéro; code> p>
int x = 100; code> p>
numéro code>. Seul le préprocesseur de pré-compilation sait ce que
nombre code> signifie. p>
code>, le compilateur pensera que vous essayez d'adopter l'adresse d'une constante littérale entière, qui n'est pas valide. P>
Non, ce n'est pas possible en C / C ++ P>
Vous pouvez utiliser la directive #define pour donner un nom significatif à une constante dans votre programme P>
Nous pouvons utiliser sur deux formes. P>
S'il vous plaît: Voir ce lien P>
http://msdn.microsoft.com/ EN-US / Bibliothèque / TEAS0593% 28VS.80% 29.aspx P>
La directive #define peut contenir une définition de type objet ou une définition de type fonction. p>
iam désolé iam Impossible de fournir une autre clin d'oeil ... S'il vous plaît voir les liens IBM..since ci-dessous j'ai collé Linke Link P>
u peut avoir une information complète de ci-dessus 2 liens p>
Il existe un moyen de surmonter ce problème: ou si vous savez que c'est le type, vous pouvez même le faire: P> int rowPointer = NULL;
getDefinePointer(&rowPointer2);
printf("ROW==%d\n", rowPointer2);
Vous voudrez peut-être consulter Stackoverflow.com/questions/1637332 , qui parle des différences entre définir et constantes.
Vous pouvez utiliser -e (g ++ -e file.cc) pour voir votre fichier après l'étape de prétraitement.
Ditto ce que Julio a dit, pour Visual Studio: Si vous cliquez avec le bouton droit de la souris sur le projet et accédez à C / C ++ -> Préprocesseur, vous pouvez le dire de créer un fichier prétraité, le fichier réel i> destiné à la compilateur.
Tout le monde a été adressé au problème macro, mais je ne suis pas vraiment suivi même lorsque le const est utilisé. Pourquoi voudriez-vous avoir un pointeur à une constante? En ce qui concerne «comment» - pouvez-vous simplement référence / désexférence à cela comme une autre variable? Y a-t-il un moyen sournois pour changer une constante à l'aide de Pointer Math?