多年来涉及多个组织和涉及C/C++的各种项目我已经看到通过定义一个本地版本的types.h大部分看起来像这样解决了对固定宽度整数的需求: -
typedef signed char int8;
typedef unsigned char uint8;
typedef signed short int16;
typedef unsigned short uint16;
typedef signed long int32;
typedef unsigned long uint32
typedef signed long long int64;
typedef unsigned long long uint64;
Run Code Online (Sandbox Code Playgroud)
为什么这些没有集成到C/C++标准中?
我知道C99已经标准化的喜欢uint32_t.类似地,微软已经定义了它自己的UINT32等等. - 但是这些仍然需要,typedef因为uintX术语的使用在传统以及由经验丰富的开发人员编写的新代码中很普遍
我也知道Boost Integer Library - 再次说明它不是标准C++,因为它们清楚地提到: -
因为这些是boost头,所以它们的名称符合boost头命名约定,而不是C++标准库头命名约定.
关于将[u]intXs纳入官方标准的利弊的想法?
编辑:
这个问题已经产生了质量答案和意见.谢谢他们提供的信息和帮助!一些评论表明这个问题不够明确: -
"你是专门要求为标准中已有的typedef添加更多的别名" - 是的
@Pascal Cuoq的回答解决了真正的问题,以防这些问题被添加到标准中: -
不要等待名称
uint32成为C++中整数类型的正式名称; 它可能永远不会发生,正是因为很多程序已经为这个名称输入了类型.
C99引入了头文件stdint.h(7.18),而C++ 11将其导入为<cstdint>.
你可能会问为什么那里的类型名称uint32_t而不是uint32.简单:因为那时名称会与现有代码冲突.
POSIX保留了_t类型的后缀.(_t如果您希望与当前和未来的POSIX系统兼容,则不应该在程序中使用任何类型.这是即使是有经验的程序员也会犯的常见错误).POSIX还使用其保留的命名空间来安全地定义uint32_t格式中的类型名称.
C99选择了与POSIX相同的名称.从C委员会的角度来看,这些名称不太可能破坏现有程序(向后兼容性是演变C语言时非常重要的考虑因素).后来,当它们出现在C++中时,保持C++和C之间的兼容性比选择不同的名称更有价值.
不要等待名称uint32成为C++中整数类型的正式名称; 它可能永远不会发生,正是因为有这么多程序已经typedef成为这个名字的类型.
| 归档时间: |
|
| 查看次数: |
1648 次 |
| 最近记录: |