Hen*_*olm 12 c language-lawyer
我编写C代码,对实现做出某些假设,例如:
char 是8位.>> 有符号整数sign-extends.doubleIEEE-754是双倍的,可以通过uint64_t预期的结果进行打字和打字.size_t不丢失信息的情况下转换回来.char*与普通算术相同size_t.void*不丢失信息的情况下再次强制转换.现在,所有这些都是C标准所不能保证的,所以严格来说我的代码是不可移植的.但是,它们在我目前正在瞄准的体系结构和ABI上都是正确的,经过仔细考虑之后,我已经确定他们未能在某些架构上保留的风险,我将来需要将其作为目标.与我现在做出假设所得到的实用好处相比.
问题是:我如何最好地记录这一决定?我的许多假设都是由几乎每个人(非八位字节char或符号幅度整数?未来,商业上成功的架构?)制定的.其他人更有争议 - 最危险的可能是关于函数指针的问题.但是,如果我只列出一切我认为超出标准给我,读者的眼睛只是要呆滞,他可能没有注意到,实际上很重要的人.
那么,是否有一些众所周知的关于成为"有点正统"的架构的假设,我可以通过引用合并,然后只明确记录我甚至超出的范围?(实际上这样的"概况"将定义一种新的语言,它是C的超集,但它可能不会承认这么多的话 - 而且它也可能不是一种实用的方法来考虑它).
澄清:我正在寻找一种记录我的选择的简写方式,而不是一种自动测试给定编译器是否符合我的期望的方法.后者显然也很有用,但并不能解决所有问题.例如,如果业务合作伙伴联系我们说:"我们正在制作基于Google新G2015芯片的设备;您的软件会在其上运行吗?" - 那么能够回答"我们还没有使用过那个拱门,但如果它有一个满足这样的C编译器就不应该是一个问题".
澄清甚至更多,因为有人投票决定关闭"不具有建设性":我不是在这里寻求讨论,只是为了指向实际的,现有的,正式的文件,可以通过引用并入我的文档.
我将介绍一个STATIC_ASSERT宏并将所有假设放在这样的断言中.