如果在某个日期之后尝试,我想使某些文件的编译失败.原因是这样的:我发现了几个Y2K38错误,我现在没有时间修复,但是想对它们进行注释,我认为如果模块的编译会失败,那么这将是很好的,说,2020.
(我可能会疯了,但这段代码是20岁,我怀疑它可能会再次生存30)
(我可能会疯了,但这段代码是20岁,我怀疑它可能会再次生存30)
解决方法
使用GCC,您可以执行以下操作:
void __attribute__((error("Whoa. It's the future"))) whoa_the_future(); void check_for_the_future() { // "Feb 1 2011" const char *Now = __DATE__; if (Now[9] >= '2') whoa_the_future(); }
这样做的方式是error属性告诉GCC生成
如果有任何调用该函数的编译时错误
代码完全是GCC的常数折叠,死码消除,和
类似的传球也跑了.由于DATE是编译时常数,
GCC可以在编译时评估if语句,并删除
呼叫.
至少有一个缺点是这取决于GCC的优化
通过,所以它不会在gcc -O0工作
老实说,你最好只是添加运行时检查在某处,失败快.
原文地址:https://www.jb51.cc/c/113659.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。