如何接收无名结构作为C函数的参数?(How to receive unnamed structure

2019-09-16 09:10发布

昨天同时通过去这个问题,我发现传递和接收无名结构作为函数参数的好奇情况。

举例来说,如果我有一个结构,这样,

int main ()
{
    struct {
        int a;
    } var;

    fun(&var);
}

现在,应该的原型fun是什么? 我怎么可以使用结构作为结构(指针)在功能fun

Answer 1:

对于定位的原因,这个原型应该工作:

void fun(int *x);

而且当然:

void fun(void *x);

我没有看到一个简单的方法实际上是在功能,有效利用结构; 也许该函数内部再次声明,然后分配void *

编辑的要求

6.7.2.1 - 15

一个指向结构对象,适当地转换,点到它的初始成员 (或如果该构件是一个比特音响场,然后在它所在的单元),并且反之亦然。 有可能是一个结构对象中的无名进行填充,而不是在其开始。



Answer 2:

您还可以定义funvoid fun(void* opaque); 。 但是,这是不被认为是一个很好的做法是声明参数为void*将剥夺它的任何类型的信息了。 您还需要解释的参数传递,你会最终有一个指针字节序列。 你将不得不通过结构的大小在某种程度上也。

这种做法的WIN32 API,让您在指定的结构(通常称为的dwSize或类似)的规模结构有一个领域是常见的。 这也可以帮助传达关于结构定义的版本信息。

这里要考虑的另一件事是结构的包装 ,这是反编译和平台依赖性。



文章来源: How to receive unnamed structures as function parameters in C?