昨天同时通过去这个问题,我发现传递和接收无名结构作为函数参数的好奇情况。
举例来说,如果我有一个结构,这样,
int main ()
{
struct {
int a;
} var;
fun(&var);
}
现在,应该的原型fun
是什么? 我怎么可以使用结构作为结构(指针)在功能fun
?
昨天同时通过去这个问题,我发现传递和接收无名结构作为函数参数的好奇情况。
举例来说,如果我有一个结构,这样,
int main ()
{
struct {
int a;
} var;
fun(&var);
}
现在,应该的原型fun
是什么? 我怎么可以使用结构作为结构(指针)在功能fun
?
对于定位的原因,这个原型应该工作:
void fun(int *x);
而且当然:
void fun(void *x);
我没有看到一个简单的方法实际上是在功能,有效利用结构; 也许该函数内部再次声明,然后分配void *
?
6.7.2.1 - 15
一个指向结构对象,适当地转换,点到它的初始成员 (或如果该构件是一个比特音响场,然后在它所在的单元),并且反之亦然。 有可能是一个结构对象中的无名进行填充,而不是在其开始。
您还可以定义fun
为void fun(void* opaque);
。 但是,这是不被认为是一个很好的做法是声明参数为void*
将剥夺它的任何类型的信息了。 您还需要解释的参数传递,你会最终有一个指针字节序列。 你将不得不通过结构的大小在某种程度上也。
这种做法的WIN32 API,让您在指定的结构(通常称为的dwSize或类似)的规模结构有一个领域是常见的。 这也可以帮助传达关于结构定义的版本信息。
这里要考虑的另一件事是结构的包装 ,这是反编译和平台依赖性。