在非结构或联合的东西中请求成员'_file'

Ste*_*pii 1 c struct pointers unions

我收到这个错误:

somedir/somefile.c: In function 'somefunc':
somedir/somefile.c:433:33: error: request for member '_file' in something not a 
structure or union
     ReturnValue->Val->Integer = _fileno(Param[0]->Val->Pointer);
                                 ^
Run Code Online (Sandbox Code Playgroud)

在尝试编译下一个代码时:

void somefunc(struct p *P, struct Value *ReturnValue, struct Value **Param, int n)
{
    ReturnValue->Val->Integer = _fileno(Param[0]->Val->Pointer);
}
Run Code Online (Sandbox Code Playgroud)

ReturnValue是一个指向,struct Value并有一个指向union内部的指针int Integer

union SomeValue
{
    int Integer;
    void *Pointer;
}

struct Value
{
    union SomeValue *Val;
}
Run Code Online (Sandbox Code Playgroud)

Param也很相似.我的意思是,一切似乎都是正确的,因为我还有另外一个像这样的功能,我没有任何错误,只有这个.怎么了?它与_fileno功能有关吗?当我换_fileno到时,会发生同样的事情fileno.

Cli*_*ord 5

_filno在这种情况下出现被定义为宏; 当扩展宏时,尝试取消引用指针参数并访问该_file成员arg->_file.然而,这将失败,因为你不能尊重void*.

指针应该是类型FILE*或从有效FILE*对象分配,然后传递给_fileno():

ReturnValue->Val->Integer = _fileno( (FILE*)Param[0]->Val->Pointer ) ; 
Run Code Online (Sandbox Code Playgroud)