我已经知道,当你需要特定的variables大小来实现平台之间的可移植性时,stdint已经习惯了,现在我真的没有这个问题,但是除了上面已经显示的事实之外,使用它的缺点和优点是什么呢? 在stackoverflow和其他网站上find它,我发现了2个关于主题的链接: 1 – 这个讨论stdint的可移植性。 2 – 这个更关心uint8_t。 这两个链接是非常重要的,特别是要更多地了解这个头的主要原因是可移植性,但对于我来说,我最喜欢的是,我认为uint8_t比unsigned char更清晰(例如用于存储RBG通道值) ,int32_t比简单的int看起来更有意义,等等 所以,我的问题是,除了可移植性之外,究竟是什么缺点,特别是使用stdint的优点,我是否应该只在代码的某些特定部分或其他地方使用它? 如果到处都是,用户如何使用atoi,strtok等function呢? 谢谢!
在C中定义ptrdiff_t在哪里? 如果不重要,我怎样才能使这种types在Linux上的GCC可见?
我和这个答案的印象一样, size_t总是由标准保证足够大,以保持给定系统的最大可能types。 但是,这段代码无法在gcc / Mingw上编译: #include <stdint.h> #include <stddef.h> typedef uint8_t array_t [SIZE_MAX]; 错误:数组'array_t'的大小太大 我在这里误解标准的东西吗? 对于给定的实现, size_t是否允许过大? 或者这是Mingw的另一个bug? 编辑:进一步的研究表明 typedef uint8_t array_t [SIZE_MAX/2]; // does compile typedef uint8_t array_t [SIZE_MAX/2+1]; // does not compile 这碰巧是一样的 #include <limits.h> typedef uint8_t array_t [LLONG_MAX]; // does compile typedef uint8_t array_t [LLONG_MAX+(size_t)1]; // does not compile 所以我现在倾向于认为这是Mingw中的一个bug,因为基于有符号整数types设置允许的最大大小没有任何意义。
stdint.h和inttypes.h有什么区别? 如果没有使用它们,uint64_t不会被识别,但是其中任何一个都是已定义的types。
如果你想使用Qt ,你必须拥抱quint8 , quint16等等。 如果你想使用guint8 ,你必须欢迎guint8 , guint16等等。 在Linux上有u32 , s16等等。 uC / OS定义SINT32 , UINT16等等。 如果你必须使用这些东西的组合,你最好准备好麻烦。 因为在你的机器上, quint32会被long typedef ,并且quint32将会被int ,编译器会报错 。 为什么每个人都这样做,如果有<stdint.h> ? 这是图书馆的某种传统吗?
stdint.h和cstdint什么cstdint ? 它们都可以在MSVC(Visual Studio 2010)和gcc-4.5.1中使用。 还要定义intX_t / uintX_ttypes(其中X是types的字节大小)。 如果两个头文件中的基本原理是相同的(便携式),那么我必须做出什么决定来决定哪一个呢? stdint.h定义了没有任何名称空间的每个types, cstdinttypes位于std名称空间中。 是否有任何理由包含或不包括定义的types到std命名空间? 两个标题有什么不同? cstdint没有文件扩展名并使用c前缀, stdint.h使用.h扩展名。 这个头文件的命名约定是什么? c前缀表示这是一个C库? 在cstdint缺less文件扩展的cstdint什么?
C99标准具有像int64_t字节大小的整数types。 我正在使用下面的代码: #include <stdio.h> #include <stdint.h> int64_t my_int = 999999999999999999; printf("This is my_int: %I64d\n", my_int); 我得到这个编译器警告: warning: format '%I64d' expects type 'int', but argument 2 has type 'int64_t' 我试着用: printf("This is my_int: %lld\n", my_int); // long long decimal 但我得到同样的警告。 我正在使用这个编译器: ~/dev/c$ cc -v Using built-in specs. Target: i686-apple-darwin10 Configured with: /var/tmp/gcc/gcc-5664~89/src/configure –disable-checking –enable-werror –prefix=/usr –mandir=/share/man […]