我们最近发现编译器(对我们来说是GCC)可以结合开发人员设置的断言来优化一些代码。
下面的代码,例如:
#include <cassert>
int getBatteryLevel(){
return 0;
}
int process(int level);
int main() {
[[maybe_unused]] const auto level = getBatteryLevel();
assert(level > 0);
process(level);
}
将链接到-O2
,即使process
没有实现。如果没有优化,它不能链接。
这在任何地方都有记录吗?
这在任何地方都有记录吗?
优化的文档不是很彻底。这里可能使用的优化是"内联展开","常量折叠";和"消除死码"。
哪里可以了解编译器
书籍是一个很好的起点,除非你打算从头开始发明计算。学术论文也可以包含好的信息,但是过滤掉不相关的东西,并找出所需的初步知识可能需要大量的工作。此外,它们每单位信息的价格往往相当昂贵。
注:如果没有定义常用的函数,那么程序就是病态的。语言实现允许接受错误格式的程序,但不是必需的。通常,需要它们来诊断这样的错误,但是在这种特殊情况下,不需要实现来诊断。