这样做的主要原因是尝试编写完美可移植的 C 库。几周后,我得到了常量,不幸的是它不是很灵活(使用常量来定义另一个常量是不可能的)。感谢任何建议或批评。
问问题
151 次
2 回答
1
我想到的第一件事是:你考虑过使用 stdint.h 吗?多亏了这一点,您的库将可以跨 C99 兼容的编译器移植。
于 2012-03-08T21:07:29.510 回答
1
你所要求的是不可能的。正如我之前所说,任何符合标准的 C 实现都将limits.h
正确定义。如果由于某种原因不正确,请归咎于编译器的供应商。在编译时不可能对真正的限制进行任何“动态”发现,特别是如果您正在为嵌入式系统进行交叉编译,因此目标架构可能具有比编译系统更小的整数。
要动态地发现限制,您必须在运行时通过位移、乘法或加法来完成,直到遇到溢出,但是您在内存中有一个变量而不是一个常数,这会慢得多。(无论如何这都不可靠,因为不同的体系结构使用不同的位级表示,并且算术有时会在限制附近变得有点时髦,尤其是对于浮点数等有符号和抽象数字表示)
只需使用 和 中的标准类型和限制stdint.h
,limits.h
或者尽量避免将限制一起推开。
于 2012-03-09T06:55:10.437 回答