C++ 更换不同平台中的fpos_t和fpos_t._位置

C++ 更换不同平台中的fpos_t和fpos_t._位置,c++,C++,在Linux(ubuntu)中,fpos\u t位于结构中 typedef fpos_t { size_t _pos, size_t _state } 在Windows中,未定义fpos。在代码库中,它是这样定义的 #ifndef _FPOS_T_DEFINED typedef __int64 fpos_t; #define _FPOS_T_DEFINED #endif /* _FPOS_T_DEFINED */ 然而,在我的代码中 foo () { fpos_t

在Linux(ubuntu)中,fpos\u t位于结构中

typedef fpos_t {
    size_t _pos,
    size_t _state
}
在Windows中,未定义fpos。在代码库中,它是这样定义的

#ifndef _FPOS_T_DEFINED
typedef __int64 fpos_t;
#define _FPOS_T_DEFINED
#endif  /* _FPOS_T_DEFINED */
然而,在我的代码中

foo () {
    fpos_t fsize;
    fgetpos(fp, &fsize);    // Function A

    bar.len = (unsigned int)fsize;                      // for windows  Function B      
    bar.body = (char *)SAFE_MALLOC( (size_t)fsize);     // for windows
    //bar.len = (unsigned int)fsize._pos;                   // for linux Function B
    //bar.body = (char *)SAFE_MALLOC( (size_t)fsize._pos);// for linux
}
问题是,当在不同的平台上编译时,用什么优雅的方式来替代fsize.\u pos到fsize。 我知道的方法

#if defined(LINUX)
    //code for linux
#else 
    //code for windows
#endif 

fpos\u t
结构被定义为不透明;没有可移植的方法从
fpos\u t
()提取文件偏移量


如果要获取文件位置的字节偏移量,请以二进制模式打开文件,并使用
ftello
()。

fpos\u t
结构定义为不透明;没有可移植的方法从
fpos\u t
()提取文件偏移量


如果要获取文件位置的字节偏移量,请以二进制模式打开文件,并使用
ftello
()。

来概括此问题,尤其是FPO。我应该如何处理这种情况,即在不同的系统中,变量定义为两种不同的类型。然而,有些API调用不会受到这种更改的影响,但有些API调用会受到影响。像这种情况一样,函数A没有问题,但函数B有问题。@0一般来说,您可以将不可移植的操作抽象为一个(可能是内联的)函数,并使用
#ifdef
等将特定于平台的代码放在该函数的定义中。谢谢,这就是我的想法。也许这是最好的方法。概括一下这个问题,不是特别针对FPO。我应该如何处理这种情况,即在不同的系统中,变量定义为两种不同的类型。然而,有些API调用不会受到这种更改的影响,但有些API调用会受到影响。像这种情况一样,函数A没有问题,但函数B有问题。@0一般来说,您可以将不可移植的操作抽象为一个(可能是内联的)函数,并使用
#ifdef
等将特定于平台的代码放在该函数的定义中。谢谢,这就是我的想法。也许这是最好的方法。