c - 是否可以在编译期间动态创建等效的limits.h宏?

标签 c dynamic portability limits

这样做的主要原因是尝试编写完美可移植的 C 库。几周后,我最终得到了常量,不幸的是,这些常量不是很灵活(使用常量来定义另一个常量是不可能的)。 感谢任何建议或批评。

最佳答案

你的要求是不可能的。正如我之前所说,任何符合标准的 C 实现都将正确定义 limits.h。如果由于某种原因它不正确,请归咎于编译器的供应商。在编译时不可能对真正的限制进行任何“动态”发现,特别是如果您正在对嵌入式系统进行交叉编译,因此目标体系结构可能具有比编译系统更小的整数。

要动态发现限制,您必须在运行时通过位移、乘法或加法来完成,直到遇到溢出,但是这样您在内存中就有一个变量而不是常量,这将是显着的慢点。 (无论如何,这都是不可靠的,因为不同的体系结构使用不同的位级表示,并且算术有时会在限制周围变得有点奇怪,特别是对于有符号和抽象数字表示,例如 float )

只需使用 stdint.hlimits.h 中的标准类型和限制,或者尝试避免将限制全部推到一起。

关于c - 是否可以在编译期间动态创建等效的limits.h宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624876/

相关文章:

c - 编译简单链表程序时出现未声明节点错误

c - 提高这段代码可读性的建议

forms - 是否可以使用 Handlebars 和 Meteor 实现动态表单输入行(通过单击添加添加新行)?

c++ - 可移植显式预取

c# - .NET 字符串哈希函数是否可移植?

database - 我应该克隆或反规范化我的数据库以供可移植使用吗?

c - DTLS:客户端重传超时/服务器消息等待超时

c - 浮点乘法溢出

java - 迭代一个集合,然后仅执行一次流连接集合的所有元素

C++ 二维动态数组崩溃