Marvin's Blog【程式人生】

Ability will never catch up with the demand for it

16 Dec 2015

GNU C的typeof和C++11的decltype

今天看Linux的代码,发现了Typeof关键字。这是一个GNU C编译器对标准C的扩展,旨在编译时取得某个变量的类型,下面是一个例子:

typeof(a) b的意思是定义一个和a一样类型的变量b。

这让我不禁联想到C++11的关键字Decltype,也有类似的功效:

得出的一个感悟是语言标准的更新一般都是对已存在扩展的一种追认。GNU C的typeof和C++11的的decltype一个在前一个在后,私以为前者在Linux内核的应用给后者做出实践上的表率,以至于后者在语言层面上将其规范化了。

推而广之,同样的现象应该还存在许多。比如C++11中新增的auto关键字,在GNU C中也有对应的版本,叫__auto_type

GNU编译器虽然不是最完美,最优化的编译器。但是它的伟大之处在于提供了一个编译器的标准实践,供后来者参考。例如clang和intel编译器中都定义了__CNUC__这个宏,表示和GNU成一格。

最后,可以看一下Linux代码中对GNU C的各种扩展的使用:include/linux/compiler-gcc.h