C语言学习笔记 : 无符号类型 unsigned 与 unsigned int 是否一样

发布时间:2024年01月20日

问题描述

  • 在阅读一些 Linux 内核代码时,偶尔遇到一些定义 ,如下
/**
 * struct pinctrl_setting_mux - setting data for MAP_TYPE_MUX_GROUP
 * @group: the group selector to program
 * @func: the function selector to program
 */
struct pinctrl_setting_mux {
    unsigned group;
    unsigned func;
};
  • 这里的 unsigned group 是否与 unsigned int group 一致?还是 unsigned long group

测试与验证

  • 基础类型一般用大小来衡量,比如 int 类型,在 32位或 64位平台上,都是 4个字节。而 long 类型,在 32位平台上是 32位,而在 64位平台上,是 64位

  • 可以使用 C 语言的 sizeof 来获取 基础类型的占用多少字节

#include <stdio.h>
#include <stdlib.h>

unsigned a;
unsigned int b;
unsigned long c;

int main(int argc, char **argv)
{
        printf("size : unsigned = %ld, %ld\n", sizeof(a), sizeof(unsigned));
        printf("size : unsigned int = %ld, %ld\n", sizeof(b), sizeof(unsigned int));
        printf("size : unsigned long = %ld, %ld\n", sizeof(c), sizeof(unsigned long));
        return 0;
}
  • 可以在 Linux ubuntu 下,直接 gcc 编译,然后运行,当前 ubuntu 是64位的

  • gcc unsigned_demo.c -o unsigned_demo 生成 可执行程序 unsigned_demo

  • 测试结果

size : unsigned = 4, 4
size : unsigned int = 4, 4
size : unsigned long = 8, 8
  • 这里说明, unsigned numunsigned int num 一致,也就是如果只有 unsigned,就是 unsigned int 类型。

  • 这里还有一个小技巧: sizeof 返回值是 size_t 类型,如果打印这个 sizeof 返回的字节数,建议使用 %ld

  • printf("size : unsigned = %ld, %ld\n", sizeof(a), sizeof(unsigned));

小结

  • Linux 内核代码就像是一个【宝藏】,里面有很多未知的各种开发经验、技术积累与技巧,等待深入的去探索。

  • 可以多积累一些技术细节,这样阅读代码不再困惑,对代码实现有个正确、清晰的认识。

文章来源:https://blog.csdn.net/tcjy1000/article/details/135711055
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。