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