【发布时间】:2019-03-21 12:06:46
【问题描述】:
是否可以在 C 和/或 C++ 中为函数定义符号模糊指针参数?
例如,假设我有一个适用于 8 位变量的无符号和有符号类型的函数,并且该函数需要一个指向要处理/操作的变量的指针。
我知道我可以使用 (unsigned char*) 或 (signed char*) 进行类型转换,但我正在寻找更清洁的东西。
unsigned char Var1;
signed char Var2;
void MyFunction(unsigned char* Var);
MyFunction(&Var2); // This creates an error
话虽如此,我想提出一个想法,即我认为高于汇编语言的语言不应该使用诸如 BYTE / WORD / DWORD 或 QWORD 之类的名称来定义具有显式符号类型的变量。我这样说是因为这些是用于组装的大小运算符,实际上并没有定义符号。登录程序集由所选指令选择。然而,我看到这些名称在 C/C++ 中随处使用,并被定义为 unsinged,至少在 Windows 上是这样。这对我来说似乎是一种利益冲突......
【问题讨论】:
-
您知道
void*或模板吗? -
1.您的意思是“签名”而不是“签名”。 2. C 和 C++ 没有单独的有符号和无符号操作符,行为由类型决定。所以很自然,类型不仅仅是一个大小(如你所愿),而且还包含语义。
-
@Tas void* 用于删除所需的符号,但现在大小不明确。大小只能是 8 位,任何大小的变量都可以用 void* 传递。
-
类型转换有什么不干净的地方?
-
@BenVoigt 我知道 C/C++ 没有单独的有符号和无符号操作运算符。阅读我帖子的最后一部分。
标签: c++ c visual-studio visual-studio-2012 programming-languages