天天看點

restrictkeyword

今天在移植ffmpeg到opencore時出現一個編譯錯誤:

/libavcodec/dsputil.c:545: error: expected ';', ',' or ')' before 'block'

等等一大堆

到檔案dsputil.c中發現是這個keywordrestrict引起的,說實話還是第一次見個keyword,趕緊上網查查:

keywordrestrict僅對指針實用,修飾指針,表明要改動這個指針所指向的資料區的内容,僅能通過該指針來實作,此keyword的作用是使編譯器優化代碼,生成更高效的彙編代碼,“由restrict修飾的指針是最初唯一對指針所指向的對象進行存取的辦法,僅當第二個指針基于第一個時,才幹對對象進行存取.”

事實上restrict同const或valiate一樣是一個修飾符而已,告訴編譯器被 restrict修飾的指針所指向的對象,僅僅能通過這個指針或基于這個指針的其它指針進行操作,即限制訪問用restrict限制的指針指向的對象僅僅能通過這個指針訪問,這對編譯器的優化非常有優點。

但要注意:restrict是C99中新增的keyword,在C89和C++中都不支援,在gcc中能夠通過-std=c99來得到對它的支援。

繼續閱讀