我试图用C++ for Windows(MinGW)和Linux(g++)编写跨平台代码。我被用于将Linux中的64位整数定义为"long",但是当我迁移到MinGW时,sizeof(long)返回了4个字节。然后,我发现我可以使用"long long“或"__INT64”来定义MinGW中的64位整数。我有两个问题:
1.-为和Linux定义64位整数的最可移植方式是什么?我目前使用的是#ifdef,但我不知道这是否是最好的方法:
#ifdef LINUX
#define INT64 long
#elif WIN32
#define INT
当我尝试使用这些函数时,它会发送以下错误:
main.cpp: In function ‘int main()’:
main.cpp:11:17: error: conversion from ‘int’ to non-scalar type ‘fpos_t {aka _G_fpos_t}’ requested
main.cpp:18:20: error: cannot convert ‘fpos_t {aka _G_fpos_t}’ to ‘FILE* {aka _IO_FILE*}’ for argument ‘1’ to ‘int fgetpos(FILE*, fpos_t*)’
守则是
我有点困惑于stdio.h库中的函数fsetpos。我想要写入文件中的不同索引(即不想连续写入文件)。我正在考虑使用fsetpos,但是文档声明。
The internal file position indicator associated with stream is set to the position
represented by pos, which is a pointer to an fpos_t object whose value shall have been
previously obtained by a call to fgetpos.
我不得不根据fgetpos
当我使用fgetpos(fp,&pos)时,调用将pos设置为负值,其中pos为fpos_t类型。有人能解释一下为什么会发生这种事吗?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAX_TAG_LEN 50
char filename[1000] = "d:\\ire\\a.xml";
//extract each tag from the xml file
int getTag
根据C99的说法,ftell的原型是:
long int ftell(FILE *stream);
根据我所理解的,这应该是以下几点:
fpos_t ftell(FILE *stream);
为什么会这样呢?
从第7.19.1条至第2节
fpos_t是一种对象类型,而不是数组类型,它能够记录唯一指定文件中每个位置所需的所有信息。
我知道应该使用fpos_t来记录文件中的位置。因此,在文件中返回一个位置的ftell应该是该类型的。相反,它是:
signed
long类型,它可能太小,也可能太大,无法在某些体系结构上访问文件。