是否有可能在编译期间动态创建limits.h宏的等价物?

时间:2012-03-08 21:00:58

标签: c dynamic portability limits

这样做的主要原因是尝试编写完全可移植的C库。几个星期后,我结束了常量,遗憾的是不是很灵活(使用常量来定义另一个常量是不可能的)。 对于任何建议或评论家而言。

2 个答案:

答案 0 :(得分:1)

我想到的第一件事是:你考虑过使用stdint.h吗?感谢您的库可以在兼容C99的编译器中移植。

答案 1 :(得分:1)

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

要动态发现限制,您必须在运行时通过位移,乘法或添加来执行此操作,直到遇到溢出,但是您在内存中有一个变量而不是常量,这将是显着的慢点。 (这不可靠,因为不同的架构使用不同的位级表示,并且算术有时会在限制范围内变得有点时髦,特别是使用带符号和抽象数字表示,例如浮点数)

只需使用stdint.hlimits.h中的标准类型和限制,或尽量避免将限制推到一起。