java typeof___typeof__() 、 __typeof() 、 typeof()的区别

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

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

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

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

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

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

因此使用 typeof() 完全ok。

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

做个简单的验证:

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

a123c22ee130b93b263257543c33a4d0.png

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

362a4900c0662faa1a354aa4dd2953e5.png

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

a7cd81c622eed5e708be1b591e530d41.png

运行后发现报错了

5471858bd9df06d25c128d13688ef389.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值