C语言ulong无法识别、typedef定义unsinged long报错,是C标准变更了吗?
问题原因与修复方案
第一个错误:ulong 类型未定义的原因
C语言标准本身从未内置 ulong 这个类型别名,2003年在Linux环境下能正常编译,是因为Linux的glibc库或系统相关头文件默认提前预定义了该别名;而MinGW64作为面向Windows的编译环境,默认头文件没有自带这个别名定义,因此抛出未知类型错误。
第二个错误的直接原因
你写的typedef语句存在拼写错误:关键字unsigned被误写为unsinged,编译器无法识别这个拼写错误的字符串,会将其判定为自定义标识符,后续跟着long就不符合C语法规则,因此抛出语法错误,这和C标准变更没有任何关系。
正确修复方法
- 首先修正拼写错误,写入正确的typedef语句:
typedef unsigned long ulong;
- 如果旧代码依赖
ulong的长度固定(比如当年在64位Linux下ulong是64位,而Windows下long默认是32位,会有长度差异),更稳妥的方案是使用C99标准的固定长度整数类型:
#include <stdint.h> // 按需选择需要的长度,要64位无符号就用uint64_t,要32位就用uint32_t typedef uint64_t ulong;
内容的提问来源于stack exchange,提问作者Tomas
相关产品推荐
相关产品推荐

