gpt4 book ai didi

c - 为什么我尝试用 typedef 定义自然类型不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 05:23:24 25 4
gpt4 key购买 nike

我试图定义一个“自然”类型,就像这样:

typedef unsigned int nat;

但是如果我定义一个 nat 变量,该变量的行为就像一个普通的 int:

nat natural_index;
natural_index = 10; // That's what I want.
natural_index = -10; // Still a valid option.

在简历中,我想知道为什么编译器不显示消息,比如“-10 不是无符号整数”,我可以做些什么来定义“自然”类型。

额外信息:我“打印”了变量 natural_index,并打印了值“-10”。我预计至少还有一个正数(不完全是 10)。

最佳答案

C 在两个不同的层面上不支持您尝试做的事情。

首先,C 中的 typedef 不会创建新的、不同的类型;它只是为原始类型创建一个简写名称。因此,经过

typedef unsigned int nat;

声明

nat natural_index;

100% 等同于

unsigned int natural_index;

(typedef 的意义何在?当“底层类型”可能因目标架构而异时,它最有用;例如,标准 typedef uint64_t可能是 unsigned longunsigned long long 的简写,具体取决于架构。)

其次,C 没有机制来改变算术表达式是否执行隐式转换。在

natural_index = -10;

赋值运算符会将负数-10(类型为int)转换为一个大的无符号数(即(UINT_MAX - 10) + 1,可能但不一定是 4,294,967,286),并且没有办法禁用它。

你的选择是使用一种真正支持这种东西的语言(例如 Ada、Haskell、ML),或者编写一个“linting”程序来解析 C 本身并强制执行你希望它强制执行的任何规则(现有示例是 lintsparse)。

关于c - 为什么我尝试用 typedef 定义自然类型不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47438872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com