c - 如何将 Windows 的 GCC long 变为 8 字节?不是赛格温
问题描述
所以这是我们教授提出的要求,我们需要使用c89
标准(没有long long
类型)。在 linux 中,在编译之前我们必须使用-ansi
flag。
我更喜欢首先使用 VS Code 在 Windows 中进行调试,但是有一天我注意到 long 溢出然后我才意识到 x64 windows 中 gcc 的 long 是 4 字节,在 x64 linux 中 gcclong
是 8 字节。
- 我很确定我选择的安装是 x86_64
- 我怎么知道它是 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
但它并没有以某种方式工作
解决方案
windows上要改成long
8字节,需要使用Cygwin64版本gcc
而不是mingw
版本。Microsoft 将模型设置为 LLP64(即long long
和void *
)是 64 位的。您不能仅使用编译器选项来覆盖它,因为系统链接会失败。但是 Cygwin 有自己的链接并提供 64 位 Unix 兼容性 where sizeof(long)
= sizeof(void *)
。
来源:https ://cygwin.com/cygwin-ug-net/programming.html
我们几乎可以做一typedef
件事#define
,但printf
格式说明符不能很好地工作。
推荐阅读
- python - 使用 iloc 在 pandas 数据框中选择值时保持浮点精度
- javascript - 为什么从 html 收集的数据没有传递给 JavaScript 类?
- php - 使用 ffmpeg 从视频中生成提取数量的缩略图
- wcf - 如何在调用另一个 SOAP 服务的 wcf 服务中设置 WSS -Time to Live 的值?
- java - 如何使用烟灰分析 .class 文件?
- progressive-web-apps - 如何为我的用户移除 Service Worker?
- android - 为什么生成的视图绑定 .inflate() 方法需要 root 参数?
- ios - ios 获取位置 react-native/Expo
- javascript - 如何在 React Native 中创建无组织的网格视图
- c# - 缺少 C# Properties.Settings