什么是POSIX?我已阅读维基百科的文章,每次遇到这个词时我都会阅读它.事实是,我从来没有真正理解它是什么.
任何人都可以通过解释"对POSIX的需求"向我解释一下吗?
在C 中使用uint8_tover有什么好处unsigned char?
我知道几乎每个系统uint8_t都只是一个typedef unsigned char,为什么要用呢?
我知道C和C++标准留下了语言实现的许多方面 - 仅仅因为如果存在具有其他特征的体系结构,那么为它编写符合标准的编译器是非常困难或不可能的.
我知道40年前任何电脑都有自己独特的规格.但是,我不知道今天使用的任何架构:
CHAR_BIT != 8signed 不是两个补充(我听说Java有这个问题).我问的原因是我经常向人们解释C++不强制要求任何其他低级方面如固定大小的类型†.这很好,因为与其他语言不同,它使你的代码在正确使用时可以移植(编辑:因为它可以移植到更多架构而不需要模拟机器的低级方面,例如符号+幅度架构上的二进制补码算法) .但我感到很难过,我自己也无法指出任何特定的架构.
所以问题是:哪些架构具有上述属性?
† uint*_ts是可选的.
我已经知道stdint用于当你需要特定的变量大小来实现平台之间的可移植性时,我现在还没有真正有这样的问题,但除了已经在上面显示的事实之外,使用它的缺点和优点是什么?
在stackoverflow和其他网站上寻找它,我找到了2个关于主题的链接:
这两个链接非常好,特别是要了解更多关于这个标题的可移植性的主要原因,但对我来说,我最喜欢它,我认为uint8_t比unsigned char更清洁(例如存储RBG通道值) ,int32_t看起来比简单的int等更有意义.
所以,我的问题是,究竟是什么缺点,特别是除了可移植性之外使用stdint的优点,我应该只在代码的某些特定部分使用它,还是在任何地方?如果到处都是,我怎样才能使用atoi,strtok等功能呢?
谢谢!
在C++ 11中,我们提供了固定宽度的整数类型,例如std::int32_t和std::int64_t,它们是可选的,因此不是编写跨平台代码的最佳选择.然而,我们也得到了各类非可选变型:例如"快"的变体,如std::int_fast32_t和std::int_fast64_t,以及"最小尺寸"变体,例如std::int_least32_t,它都至少指定数目的大小位.
我正在处理的代码是基于C++ 11的跨平台库的一部分,它支持在最流行的Unix/Windows/Mac编译器上进行编译.现在出现的一个问题是,如果用C++ 11固定宽度整数类型替换代码中的现有整数类型是否有优势.
使用类似变量的缺点std::int16_t和std::int32_t是缺乏保证它们是可用的,因为只提供他们如果实现直接支持的类型(根据http://en.cppreference.com/w/cpp/types/integer).
但是,因为int至少16位且16位对于代码中使用的整数足够大,所以使用std::int_fast16_tover int呢?它提供了一个好处,以取代所有int类型的std::int_fast16_t,所有unsigned int通过的std::uint_fast16_t那样,或者这是不必要的?
Anologously,如果知道所有支持的平台和编译器配备了int至少32位的大小,是否有意义通过替换他们std::int_fast32_t和std::uint_fast32_t分别?
我在C++中有以下程序
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <limits>
using namespace std;
int main()
{
printf("range of int: %d to %d", SHRT_MIN, SHRT_MAX);
int a = 1000006;
printf("\n Integer a is equal to %d", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 如何a存储大于MAX限制的整数?