我想用不同的名称调用同一个变量,如何为其分配别名?
我是否坚持使用宏,例如
#DEFINE Variable Alias
总之:
- 我更喜欢在 C 中应用它
- 我有一个信号,它可以是不止一种变量(温度、距离等)
- 我想为该信号分配多个别名
我目前在 C 中使用函数作为重命名方法。
所以给定变量:int signal
我会做以下
int Temperature(){return signal;}
在 C++ 中为变量提供别名的方法是使用引用。例如,
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.
你说
int a, *b;
b = &a; // *b is now an alias of a
我喜欢将指针视为在您为它加星号时为您提供变量的东西,而与符号则是别名生成运算符。
Eric Lippert 答案的替代方案:
int a;
int * const b = &a;
现在*b
与a
不能指向其他任何东西一样,编译器不会生成额外的代码来处理a
or *b
,也不会为指针保留空间。
C ++,类似于:
struct A{
union{
int temperature;
int sametemperature;
};
};
A a;
a.temperature = 2;
a.sametemperature = 3;
根据编译器和兼容性标志,您可以在纯 C 中摆脱这种情况。简而言之,尝试利用匿名联合。问题很旧,但是,我一直在寻找同一个问题的答案,并意识到有一个没有指针/引用或宏的解决方案。
为什么不将它作为参数传递给函数并在函数参数中使用适当的名称?我不认为#define 是一个好主意,因为它可能会导致混淆。那是在 C 中。当然,您可以在 C++ 中使用别名。
我认为#define 不是为这个用例设计的。首先,因为它是在程序编译之前处理的预处理器指令。你失去了让编译器给出有意义警告的机会,你最终可能会遇到一个难以修复的奇怪错误或警告。
指针似乎可以工作,但您每次都需要使用 *(取消引用运算符),这很危险,更难阅读,如果您错过 *,您可能会遇到分段错误或类似的内存错误。
尝试发布一些代码,我们可能会找到适合您需求的适当解决方案。