8
votes

Comment assigner à une variable un alias

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 xxx

En résumé:
  1. Je préfère l'appliquer en C
  2. J'ai un signal qui peut être plus d'un type de variable (température, distance, etc.)
  3. Je veux attribuer plus d'un alias à ce signal

    Je le fais actuellement en C à l'aide de fonctions en tant que méthode de renommage.

    Ainsi, étant donné la variable: Int Signal

    Je ferais ce qui suit xxx

c c++

4 commentaires

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


6 Réponses :


29
votes

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.


6 commentaires

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; n'est-ce pas? Parce que votre code n'a aucun sens.


@juanchopanza Le int & j = j; 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



3
votes

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 ++.


0 commentaires

8
votes

Vous dites

int a, *b;
b = &a; // *b is now an alias of a


1 commentaires

Bien que B puisse être apporté à quelque chose d'autre, donc je ne l'appellerais pas un alias.



1
votes

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.

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.

Essayez de poster un code et nous pourrions trouver une solution appropriée qui convient à votre besoin.


0 commentaires

7
votes

Une alternative à la réponse d'Eric Lippert: xxx

maintenant * b est identique au A 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 ou * b , ni espace de réserve pour un pointeur.


1 commentaires

Cela devrait être la réponse acceptée. Fonctionne dans C, B est le pointeur de Const.



5
votes

C ++, quelque chose du long des lignes de: xxx

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.


1 commentaires

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).