part 2 - 為什麼string系列函數要返回值?
這問題困擾我許久,google許多文章之後沒有一個標準答案,以下總結出幾個論點。
1. 歷史原因
2. 設計者認為這是他心中理想的返回值
3. 支援連續鏈式表達,使運算結果可以直接用於表達式中
4. 另一派認為可以不返回或返回strlen
關於第3點與第4點的部份可以特別來討論一下
如果string function返回頭指標的話,就可以使用以下的寫法:
printf("result = %s",strcpy(a,strcat(b,strrev(c,d))));
因為有返回頭指標,所以可以直接使用頭指標進行連續操作。
但有另一派認為這會降低程式的可讀性,因此不推崇這種做法。
個人認為,這問題就只是一種trade off而已,端看上層調用者想怎麼寫。
而這類library回傳頭指標的做法,可以讓caller有更多的選擇,
1. 採用可讀性較低鏈式表達,但程式碼簡潔;
2. 採用可讀性高的寫法不使用返回值,但行數較多。
個人淺見,與您分享。