正如我前面的文章提到的,C语言虽然已经比较成熟,但是近些年来也是有所发展的——比如增加了许多新特性。遗憾的是,可能因为C语言程序员的工资比不过互联网程序员,国内很多教材比较老旧,几乎不涉及近些年来C语言新增的新特性。
事实上,目前大多数平台已经至少支持 C99 标准,而 C99 中新增的一些特性或者关键字的确非常好用,能够大大提升C语言程序的开发效率,以及增加代码可读性。
restrict 关键字
例如,C99 中新增了 restrict 关键字,它能够帮助编译器优化C语言代码,生成效率更高的程序。
确切来说,restrict 是为C语言指针服务的关键字,程序员可以通过 restrict 通知编译器指针索引内存的一些特征,便于编译器有选择的优化代码,生成高效程序。
restrict 关键字修饰指针时,用于通知编译器只有该指针以及该指针的派生值(例如指针+1)才用于访问指向的对象,别的指针不会和该指针一样指向相同的对象。这有助于编译器执行优化,稍后读者可通过一个例子看到这一点。
如果编译器不能确定上面这样的特征,将不敢执行优化,否则可能导致程序出现“未定义”的行为。原则上来说,合理的使用 restrict 关键字,可以让最终的C语言程序提升相当多的性能。
实例
接下里,本文将以两个简单实例讨论 restrict 关键字的作用,请看下面这段C语言代码:
void updatePtrs(size_t *ptrA, size_t *ptrB, size_t *val){ *ptrA += *val; *ptrB += *val;}