2011年1月20日 星期四

關於"warning: deprecated conversion from string constant to ‘char*"這個warning

.

印象中,至從某個版本gcc(應為gcc4.3)更新後,就會出現這個warning
原本不會有warning的code,根新後,一堆這種warning

我記得原因是,當你宣告一個字串常數char *str = "xxx";
可是,你卻把他當成char *給別人,而非const char *,於是別人就可以改該常數
正確的解法是改code,該constant就傳constant

程式是該有任何warning的,沒錯!

但問題是不是我寫的code,又即將要淘汰,而又有很多很多warning,怎辦?
從某個地方找到solution,將該特定warning濾掉吧,先focus在別的warning吧

在make file或gcc指令加入該參數(來源出處):

-Wno-write-strings

這個solution我試過,有用,它會濾掉該特定warning

當然,最根本的解法是寫出沒有warning的code
如果是需要maintain的code,時間又充裕,還是花時間改吧

同一個網頁提供使用sed批次處理的解法,他沒試過,我也沒試過,但有5人投票他票,這個解法不能解全部,但能大幅減輕warning數量

find . -exec sed -E -i .backup -n \ -e 's/char\s*\*\s*(\w+)\s*= "/char const* \1 = "/g' {} \;


.

沒有留言: