__typeof__() 、 __typeof() 、 typeof()的区别

 __typeof__()和 __typeof()和  typeof() 都是 C 的扩展,且意思是相同的,标准C不包括这样的运算符安全

    

    

    标准C:  ANSI C ,ISO C, Standard C C89 C99  C11 这些其实都是一个东西,只是不一样时期的叫法。spa

    GNU C: (革奴 C) 支持标准C的基础上作了一些C扩展命令行

    

    在标准C  中写扩展是 以 __ 开头,因此在标准C中要写成 __typeof() 或 __typeof__()code

    在GNU C 中支持直接写 typeof()  或者 __typeof()  或者 __typeof__()cmd

 

iOS 使用Clang编译器, 默认用的C语言版本是 GNU99 ,而且容许'asm'inline''typeof'的选项设置为Yes。编译器

所以使用 typeof() 彻底ok。asm

若是之后用于编译的C语言版本 不是 GNU C了,你就炸了。直接报错编译

 

作个简单的验证:基础

1.Xcode中新建一个命令行项目 (注意建立项目时,语言选的是C语言,不是OC。 若是选择OC建立OC项目的话,当选择标准C的时候,系统的有些类就直接报错,看不到typeof的错误), (下图,能够看到默认是GNU99 )扩展

 

2.在main.m中写 typeof(),cmd + R  正确运行,控制台打印。

3.将Xcode中的 GNU C 设置 成 标准C

运行后发现报错了

 

总结:若是但愿更安全,建议使用 __typeof__() 或者 __typeof()  这样,若是用于编译的C语言版本发生变化,也不会受到影响。

相关文章
相关标签/搜索