比方说,我们创建了 C 的重新实现,唯一的区别是 推断类型。存储类和修饰符仍然需要 给定(const、static、restrict 等),让我们将注意力限制在单个 暂时归档 C 程序。可以吗?主要有哪些 障碍?
关于可能导致类型推断问题的一些想法
- 具有相同字段名称的结构需要手动消除歧义
- 对于具有相同字段名称的 union 也是如此
casts 可能需要一个“from”注释,比如
var i = (uint32_t -> uint64_t) *some_pointer;
这些问题需要一些用户注释,但不应该太多 很麻烦,是否有一些致命的问题使这个想法落空?
编辑:澄清一下,我不是在谈论添加泛型或参数多态性,只是对现有 C 类型进行类型推断。
2014 年编辑:任何对这个概念感兴趣的人都可能想研究一下 Rust
最佳答案
GCC 5.1 支持:
__auto_type
扩展,类似于 C++11auto
typeof
扩展,类似于 C++11decltype
/* Same as: double j = 0.5; */ typeof(1 + 0.5) j = 0.5; assert(j == 0.5);
Linux 内核示例:How does the typecheck macro from the Linux kernel work?
_Generic
C11 关键字:Syntax and Sample Usage of _Generic in C11__auto_type i = 1; assert(_Generic((i), int: 1, default: 0));
关于c - 是否可以将类型推断添加到 C 语言中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513806/