c++ - 可靠地确定 char 的大小

标签 c++ c sizeof

我想知道如何以可移植的方式可靠地确定字符的大小。不能使用 AFAIK sizeof(char) 因为它总是产生 1,即使在字节有 16 位甚至更多或更少的系统上也是如此。

例如,在处理位时,您需要知道它到底有多大,我想知道这段代码是否会给出字符的实际大小,而与编译器的想法无关。 IMO 指针必须由编译器增加到正确的大小,所以我们应该有正确的值。我的看法是否正确,或者指针算法可能存在一些隐藏的问题,这会在某些系统上产生错误的结果?

int sizeOfChar()
{
    char *p = 0;
    p++;
    int size_of_char = (int)p;
    return size_of_char;
}

最佳答案

有一个 CHAR_BIT <limits.h> 中定义的宏其评估完全符合其名称的含义。


IMO the pointer has to be increased by the compiler to the correct size, so we should have the correct value

不,因为指针运算是根据 sizeof(T) 定义的(指针目标类型)和 sizeof运算符产生以字节为单位的大小。 char始终正好是一个字节长,因此您的代码将始终产生 NULL指针加一(可能不是数值 1 ,因为 NULL 不需要为 0)。

关于c++ - 可靠地确定 char 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16562140/

相关文章:

c - 从 size_t 转换为 int 时没有警告

c - 读取每行 3 个字符的文件时,sizeof(char) 不起作用

C++ 无意义错误 : c2629 "Unexpected class", c2065: 'ceil' 未声明的标识符

c++ - CMake 无法链接到 vcpkg 库

c - 启用从用户空间进程调试内核模块

c - 嵌入式系统中的内存冲突

c++ - wstring 的 isupper 和 islower

c++ - 调用成员函数时 'this'参数什么时候求值?

c - C 中的简单程序的奇怪输出

c++ - 为什么没有成员变量的 C++ 类会占用空间?