typeof、 __typeof 、及__typeof __的区别

Author Avatar
纸简书生 4月 05, 2017

这个问题是一个同事在看一些第三方源码的时候产生的疑惑,顺便就问了我。

解惑

__typeof__()__typeof()是对c语言的编译扩展,因为标准的c没有包含这样的操作符。标准c要求会对带有双下划线进行编译器预处理,这也是为什么我们在命名自己的方法和变量的时候不能用双下划线。

typeof()准确来讲是和上面两者相同,只是更加强调了这个特性,而这个特性是几乎每一个现代编译器都支持的。typeof()也是对c的扩展,如果用Objective-c写代码,将会用Clang编译器。

Clang是不支持typeof()的使用,但是从技术上讲,他是在c语法被设置为gnu类型会起作用。然而__typeof__()是支持c和gnu语法。

如果用Xcode作为IDE,默认为c语法设置的是GNU99,而且'asm' 'inline' 'typeof'选项是YES。所以使用typeof()不会有任何问题。

如果想更为安全的使用Clang编译器,那么就使用__typeof__()。这样的话就不会当你有人关掉typeof选项的时候造成的影响。