我最近才意識到我在OS X上使用如此多的函數的strdup()
函數不是ANSI C的一部分,而是POSIX的一部分。我不想重寫我所有的代碼,所以我想我只是寫我自己的strdup()
函數。這並不難,真的,這只是一個malloc()
和strcpy()
。無論如何,我有這個函數,但是如果我編寫這個函數並將其鏈接到我的代碼,並且它已經存在於libc中,我該怎麼辦?我的鏈接器或編譯器是否允許我基本定義自己的函數版本,還是必須給它另一個名稱?如果有一種重用相同名稱的方法,這非常方便,因此如果strcpy()
存在於用戶的libc中,他們可以使用它,但是如果它不存在於libc中,他們可以使用我的版本,代碼更改儘可能。strdup()函數
短的版本:
一)當我寫我自己的函數具有相同的名稱作爲一個內置的功能,會發生什麼?
B)我能做些什麼,以避免不好的事情發生在我的平臺上沒有strdup()
無需重寫我的代碼,不使用strdup()
,這僅僅是一個有點乏味?
如果您覺得雄心勃勃,您甚至可以設置automake和autoconf來配置測試是否需要自己定義strdup所需的宏,而不是列舉您希望支持的所有編譯器和環境。 – 2009-01-27 06:28:24