【发布时间】:2019-09-28 19:36:52
【问题描述】:
我有一个结构obj 和一个用一些值填充这个结构的函数(在单独的文件中)。由于系统设计,此功能不能成为结构的一部分(由脚本生成)。
最终结构可能会发生变化,因此应该相应地更新功能。问题是修改结构的开发者可能会忘记更新对应的函数,编译器不会提醒(如果添加了一些参数,而现有参数保持不变)。
我想到的最好的办法是在编译时检查sizeof(obj) 并将其与之前已知的大小进行比较。当结构的大小发生变化时,编译器会抛出错误,因此开发人员会仔细查看此函数并对其进行更新。
This question 有STATIC_ASSERT 的解决方案。问题是编译器不打印结构的 current 大小。因此开发人员不知道将什么设置为新的预期结构大小。
我想要这样的东西:
STATIC_ASSERT(sizeof(obj) == 1234)
编译器应该输出如下内容:
error: ... sizeof(obj) is 5678 ...
如果 sizeof(obj) 符合预期,编译器不应打印任何内容。
This solution 打印带有 sizeof() 值的警告,但在我的构建环境中,警告被视为错误,因此我无法应用此解决方案:由于该警告,我的构建将一直失败。
那么我怎样才能让编译器引发错误或警告只有在sizeof 不符合预期?
【问题讨论】: