首页 > 解决方案 > 如何将 Windows 的 GCC long 变为 8 字节?不是赛格温

问题描述

所以这是我们教授提出的要求,我们需要使用c89标准(没有long long类型)。在 linux 中,在编译之前我们必须使用-ansiflag。

我更喜欢首先使用 VS Code 在 Windows 中进行调试,但是有一天我注意到 long 溢出然后我才意识到 x64 windows 中 gcc 的 long 是 4 字节,在 x64 linux 中 gcclong是 8 字节。

  1. 我很确定我选择的安装是 x86_64
  2. 我怎么知道它是 4 字节运行printf("The size of long is: %d\n", (int)sizeof(long));

我是否需要向 gcc 添加任何命令行标志以使大小long变为 8bit?
我该怎么做才能使 GCC 保留long为 8 字节?
顺便说一句,我打开头文件,我看到了这 是什么

C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\x86_64-w64-mingw32\include\_mingw.h
我试图改变为

#ifndef __LP64__    /* 32 bit target, 64 bit Mingw target */
#define __int64 long
#else           /* 64 bit Cygwin target */
#define __LONG32 int
#endif

但它并没有以某种方式工作

标签: cgcclong-integer

解决方案


windows上要改成long8字节,需要使用Cygwin64版本gcc而不是mingw版本。Microsoft 将模型设置为 LLP64(即long longvoid *)是 64 位的。您不能仅使用编译器选项来覆盖它,因为系统链接会失败。但是 Cygwin 有自己的链接并提供 64 位 Unix 兼容性 where sizeof(long)= sizeof(void *)

来源:https ://cygwin.com/cygwin-ug-net/programming.html

我们几乎可以做一typedef件事#define,但printf格式说明符不能很好地工作。


推荐阅读