You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

i686-w64-mingw32-g++编译报__int8 does not name a type错误解决

报错原因
  • __int8/__int16/__int32/__int64是MSVC(Visual Studio默认编译器)的专属非标准内置类型,MinGW所用的GCC编译器默认不识别这类类型,因此会报“does not name a type”错误。
  • 你后续替换的__int8_t/__uint8_t属于编译器内部保留的标识符(双下划线开头的标识符默认保留给编译器实现用),不是对外暴露的标准类型;且你引入的<stdio.h>是标准输入输出头文件,根本不包含固定宽度整数类型的定义,自然改完还是报错。
解决方法

方案1:使用标准固定宽度整数类型(推荐,跨编译器兼容性最好)

C/C标准从C99、C11开始就规定了固定宽度整数类型,定义在<cstdint>(C++环境)或<stdint.h>(C环境)头文件中,MSVC、GCC、Clang等所有主流编译器都支持,直接用即可:

// C++环境包含这个头文件,C环境换成#include <stdint.h>
#include <cstdint>

// 有符号整数别名
typedef int8_t  Int8;
typedef int16_t Int16;
typedef int32_t Int32;
typedef int64_t Int64;

// 无符号整数别名
typedef uint8_t  Uint8;
typedef uint16_t Uint16;
typedef uint32_t Uint32;
typedef uint64_t Uint64;

注意:标准类型名是int8_t/uint8_t,前面不要加双下划线。这类类型的长度是标准明确规定的,和MASM的类型对应关系非常清晰,做混合编程时反而比MSVC专属类型更不容易出匹配错误:

  • 1字节宽的Int8/Uint8 对应MASM的BYTE
  • 2字节宽的Int16/Uint16 对应MASM的WORD
  • 4字节宽的Int32/Uint32 对应MASM的DWORD
  • 8字节宽的Int64/Uint64 对应MASM的QWORD

方案2:开启GCC的MSVC兼容扩展,保留原有代码写法

如果你不想修改已有的__int8风格代码,编译时给MinGW的g++加上-fms-extensions编译参数,开启MSVC语法兼容扩展即可识别这些类型,示例编译命令:

i686-w64-mingw32-g++ 你的源文件.cpp -fms-extensions -o 输出程序.exe

内容的提问来源于stack exchange,提问作者I_4m_Z3r0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:03:27