__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語言版本發生變化,也不會受到影響。

相關文章
相關標籤/搜索