其實每一個項目變得很龐大的時候都會有命名衝突的問題,一我的開發整個軟件的時代已通過去,如今更多的是好多團隊一塊兒合做開發一個東西。這樣就必然的致使好多人定義了標籤相同個函數。C++中的namespace,java中的包的概念已經erlang中的MFA的模式都是爲了解決命名衝突的問題。java
C語言在這點上處理的不是太好,通過預處理器的處理後咱們incldue的文件都會在本地展開,而後全部的函數變量,enum都是整個文件做用域。若是A和B負責寫兩個不一樣的module,而後各自在.h文件裏寫了一個函數foobar,以後C引入列A,B的header文件,這時候就會產生命名衝突。書中就提到了一個很好的解決辦法:頭文件的名字_函數名:函數
<arith.h>≡ extern int Arith_max(int x, int y); extern int Arith_min(int x, int y);
剛在跑步的時候還在想這個問題,項目的bug一個接着一個,真的是源源不斷這裏的問題到底出如今哪裏。而後回來後看到了這一節,若是client和實現之間的責任不明確的時候很容易出現問題,就那最簡單的null check來講,這裏的check放在哪裏都是合理的,若是對輸入參數沒有一個很好的說明的話,就會形成責任不明確。spa
-END-code