亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

typedef用法的必要性

typedef用法的必要性

梵蒂岡之花 2019-03-30 09:29:28
在看cocos2d-x的源碼,發現很多地方有這樣的定義(源碼在這里):typedefstruct_AsyncStruct{std::stringfilename;CCObject*target;SEL_CallFuncOselector;inthandler;}AsyncStruct;我的問題是:為什么不直接這樣寫:structAsyncStruct{std::stringfilename;CCObject*target;SEL_CallFuncOselector;inthandler;}
查看完整描述

2 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

C語言規定,變量定義要寫elaboratedtype,也就是說,對于structS{...}類型的變量定義要寫成structSs;,為了省掉這個struct,你就需要用typedefstructSS1來定義個名叫S1的elaboratedtype,然后你就可以直接用S1來定義變量了。
其實C標準中S和S1可以重名,也就是說你可以寫typedefstructSS,但有一些古老的編譯器不支持你這么寫,所以一般會換個名字比如typedefstruct_SS。
以上所述只針對C語言,C++基本沒這個問題(除了friend聲明)。
PS.對于像cocos2d-x這樣只能用在新編譯器上的C++庫,還這么寫只能說明作者其實根本沒明白為什么。
                            
查看完整回答
反對 回復 2019-03-30
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

程序猿大多不想做重復的工作,你比較下下面兩段代碼:
structAsyncStruct{
inta;
intb;
};
structAsyncStructi;//定義一個變量
structAsyncStructj;//定義另外一個變量
typedefstruct_AsyncStruct{
inta;
intb;
}AsyncStruct;
AsyncStructi;//定義一個變量(這里不用再寫一個**struct**)
AsyncStructj;//定義另外一個變量(這里不用再寫一個**struct**)
如果是后者寫法:其他人也不用糾結定義一個AsyncStruct變量時要不要加struct~
                            
查看完整回答
反對 回復 2019-03-30
  • 2 回答
  • 0 關注
  • 427 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號