Gần đây tôi đã nhận thức được rằng chức năng strdup()
Tôi rất thích sử dụng rất nhiều trên OS X không phải là một phần của ANSI C, nhưng là một phần của POSIX. Tôi không muốn viết lại tất cả các mã của mình, vì vậy tôi nghĩ tôi sẽ viết hàm strdup()
của riêng mình. Nó không phải là khó, thực sự, nó chỉ là một malloc()
và một strcpy()
. Dù sao, tôi có chức năng, nhưng tôi đang làm gì nếu tôi viết chức năng này và liên kết nó với mã của tôi, và nó đã tồn tại trong libc? Trình liên kết hoặc trình biên dịch của tôi có cho phép tôi về cơ bản xác định phiên bản chức năng của riêng tôi không, hoặc tôi có phải đặt tên khác cho nó không? Sẽ rất thuận tiện nếu có một cách để sử dụng lại cùng tên, để nếu có strcpy()
tồn tại trong libc của người dùng, họ có thể sử dụng nó, nhưng nếu nó không tồn tại trong libc của họ, họ có thể sử dụng phiên bản của tôi. thay đổi mã càng tốt.strdup() chức năng
Phiên bản ngắn:
a) gì xảy ra khi tôi viết chức năng riêng của tôi với tên giống như một hàm built-in?
b) Tôi có thể làm gì để tránh những điều xấu xảy ra với tôi trên nền tảng không có strdup()
mà không cần viết lại tất cả mã của mình để không sử dụng strdup()
, điều này hơi tẻ nhạt?
Nếu bạn cảm thấy tham vọng, bạn thậm chí có thể thiết lập automake và autoconf để cấu hình macro cần thiết để kiểm tra xem bạn có cần tự xác định strdup hay không, thay vì liệt kê tất cả các trình biên dịch và môi trường bạn muốn hỗ trợ. –