Hôm nay tôi phải sử dụng basename()
chức năng này và man 3 basename
( ở đây ) đã cho tôi một số tin nhắn lạ:
Ghi chú
Có hai phiên bản khác nhau của basename () - phiên bản POSIX được mô tả ở trên và phiên bản GNU , phiên bản nào có sau
#define _GNU_SOURCE
#include <string.h>
Tôi đang tự hỏi điều này #define _GNU_SOURCE
có nghĩa là gì: nó có làm mờ mã tôi viết bằng giấy phép liên quan đến GNU không? Hoặc đơn giản là nó được sử dụng để nói với trình biên dịch một cái gì đó như " Chà, tôi biết, bộ chức năng này không phải là POSIX, do đó không thể mang theo được, nhưng dù sao tôi cũng muốn sử dụng nó ".
Nếu vậy, tại sao không cung cấp cho mọi người các tiêu đề khác nhau, thay vì phải xác định một số macro tối nghĩa để thực hiện một chức năng này hay chức năng khác?
Một cái gì đó cũng lỗi tôi: làm thế nào trình biên dịch biết thực hiện chức năng nào để liên kết với thực thi? Liệu nó có sử dụng điều này #define
là tốt?
Bất cứ ai có một số gợi ý để cung cấp cho tôi?
_GNU_SOURCE
là để có đượcstrfry
vàmemfrob
.