【发布时间】:2012-11-08 07:04:11
【问题描述】:
我有一个 incr 函数来增加值 1
我想让它通用,因为我不想为相同的功能制作不同的功能。
假设我想将int,float,char 增加1
void incr(void *vp)
{
(*vp)++;
}
但我知道的问题是Dereferencing a void pointer is undefined behaviour。有时可能会报错:Invalid use of void expression。
我的main 功能是:
int main()
{
int i=5;
float f=5.6f;
char c='a';
incr(&i);
incr(&f);
incr(&c);
return 0;
}
问题是如何解决这个问题?有没有办法在Conly 解决它
或
我必须为每种数据类型定义incr() 吗?如果是,那void *有什么用
swap() 和 sort() 存在同样的问题。我想用相同的功能交换和排序各种数据类型。
【问题讨论】:
-
C++ 是否有整数类型的后缀增量?为什么要重新定义它?
-
在 C11 中你可以使用
_Generic: robertgamble.net/2012/01/c11-generic-selections.html -
@Yola:这只是一个演示......实际上我必须在我的项目中创建很多可能的函数,即使在结构上也应该适用于可能的数据类型,而且我不想创建那么多函数
-
你考虑过使用 typeof
标签: c void-pointers