Je veux appeler la même variable avec un nom différent, comment puis-je l'affecter un alias?
Est-ce que je tiens à utiliser une macro, comme p> Je le fais actuellement en C à l'aide de fonctions en tant que méthode de renommage. p> Ainsi, étant donné la variable: Je ferais ce qui suit p> En résumé: h1>
Int Signal Code> P >
6 Réponses :
Le moyen de fournir un alias pour une variable en C ++ est d'utiliser des références. Par exemple,
int i = 42; int& j = i; // j is an alias for i const int& k = j; // k is an alias for i. You cannot modify i via k.
Il déclare C dans le sujet, mais étiqueté C & C ++. Cette réponse fonctionne bien pour l'un de ceux-ci. :)
Et pour C, il a donné le seul moyen de faire un alias. Sinon, il peut faire des pointeurs ... mais ce ne sont pas des alias.
Vous vouliez dire int * j = & i; code> n'est-ce pas? Parce que votre code n'a aucun sens.
@juanchopanza Le int & j = j; code> n'a aucun sens. Aucun rapport de j à i.
@Zel Droite, c'était une faute de frappe stupide. Désolé pour la confusion.
@juanchopanza laissez-moi savoir comment je peux résoudre la question de sorte que c'est plus approprié. Je ne peux pas poser de nouvelles questions à cause de ces commentaires négatifs
Pourquoi ne pas simplement le transmettre comme paramètre sur la fonction et utiliser le nom approprié dans l'argument de la fonction? Je ne pense pas que #define est une bonne idée car cela peut conduire à l'obfuscation. C'est dans C. Bien sûr, vous pouvez utiliser des alias en C ++. P>
Vous dites
int a, *b; b = &a; // *b is now an alias of a
Bien que B code> puisse être apporté à quelque chose d'autre, donc je ne l'appellerais pas un alias.
Je pense que #define ne conçoit pas pour ce cas d'utilisation. Premièrement, parce que c'est une directive de préprocesseur qui est traitée avant que le programme ne soit compilé. Vous perdez une chance pour le compilateur de donner un avertissement significatif et vous risquez d'avoir une étrange erreur ou un avertissement difficile à réparer. P>
Le pointeur semble fonctionner, mais vous devez utiliser un * (opérateur de déséroférence) à chaque fois dangereux, plus difficile à lire et si vous manquez la touche * Vous pourriez obtenir une erreur de segmentation ou une erreur de mémoire similaire. P>
Essayez de poster un code et nous pourrions trouver une solution appropriée qui convient à votre besoin. P>
Une alternative à la réponse d'Eric Lippert: maintenant * b code> est identique au A code> il ne peut pas être apporté sur le point Pour autre chose, le compilateur ne générera pas de code supplémentaire pour gérer a code> ou * b code>, ni espace de réserve pour un pointeur. p> p>
Cela devrait être la réponse acceptée. Fonctionne dans C, B est le pointeur de Const.
C ++, quelque chose du long des lignes de: Selon les drapeaux du compilateur et de la compatibilité, vous pouvez vous en tirer dans la plaine C. En bref, essayez de tirer parti des syndicats anonymes. La question est ancienne, mais je cherchais une réponse à la même question et réalisa une solution sans points de pointe / références ou macros. P> p>
J'aime cette solution, cela enregistre le coût de la mémoire d'un pointeur ou d'une référence (8 octets sur des architectures 64bits).
Je verrais cela comme une odeur de code définitive. Peut-être que vous pouvez expliquer mieux ce que votre problème est. Sont ces variables globales? Pourquoi auriez-vous besoin d'alias différentes variables à la même chose?
Aussi, est-ce c ou c ++?
Je ne peux pas voir de bonnes choses à faire ce genre de chose. Une variable a un nom lié à son contenu, si vous devez modifier le nom de chaque sous-section, êtes-vous sûr de vouloir que ce soit la même variable?
@Joe La variable est l'état d'un signal externe. Ce signal externe peut être commuté pour interroger différents capteurs. De préférence en C, mais cela peut être fait en C ++ avec du travail supplémentaire P.S. Essayer de résoudre ce problème pour être plus approprié, les opinions sont valorisées