在Linux(ubuntu)中fpos_t在结构中
typedef fpos_t {
size_t _pos,
size_t _state
}
在Windows中,未定义fpos_t。在代码库中,是以这种方式定义的。
#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._pos替换fsize的优雅方法是什么?
我知道的方法
#if defined(LINUX)
//code for linux
#else
//code for windows
#endif
最佳答案
fpos_t
结构定义为不透明;没有从fpos_t
(Cast fpos_t to int or char)提取文件偏移量的便携式方法。
如果要获取文件位置的字节偏移,请以二进制模式打开文件并使用ftello
(ftello/fseeko vs fgetpos/fsetpos)。
关于c++ - 在不同平台上替换fpos_t和fpos_t._pos,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35067816/