这样做的主要原因是尝试编写完美可移植的 C 库。几周后,我最终得到了常量,不幸的是,这些常量不是很灵活(使用常量来定义另一个常量是不可能的)。 感谢任何建议或批评。
最佳答案
你的要求是不可能的。正如我之前所说,任何符合标准的 C 实现都将正确定义 limits.h
。如果由于某种原因它不正确,请归咎于编译器的供应商。在编译时不可能对真正的限制进行任何“动态”发现,特别是如果您正在对嵌入式系统进行交叉编译,因此目标体系结构可能具有比编译系统更小的整数。
要动态发现限制,您必须在运行时通过位移、乘法或加法来完成,直到遇到溢出,但是这样您在内存中就有一个变量而不是常量,这将是显着的慢点。 (无论如何,这都是不可靠的,因为不同的体系结构使用不同的位级表示,并且算术有时会在限制周围变得有点奇怪,特别是对于有符号和抽象数字表示,例如 float )
只需使用 stdint.h
和 limits.h
中的标准类型和限制,或者尝试避免将限制全部推到一起。
关于c - 是否可以在编译期间动态创建等效的limits.h宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624876/