0

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

4

2 回答 2

1

我想到的第一件事是:你考虑过使用 stdint.h 吗?多亏了这一点,您的库将可以跨 C99 兼容的编译器移植。

于 2012-03-08T21:07:29.510 回答
1

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

要动态地发现限制,您必须在运行时通过位移、乘法或加法来完成,直到遇到溢出,但是您在内存中有一个变量而不是一个常数,这会慢得多。(无论如何这都不可靠,因为不同的体系结构使用不同的位级表示,并且算术有时会在限制附近变得有点时髦,尤其是对于浮点数等有符号和抽象数字表示)

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

于 2012-03-09T06:55:10.437 回答