Tôi có một vài bản sao, chúng ta hãy nói, stddef.h
trên hệ thống của tôi, một là trong đường dẫn /usr/include/linux/stddef.h
, và trông như thế này:Tại sao các tiêu đề khác nhau có cùng tên?
#ifndef _LINUX_STDDEF_H
#define _LINUX_STDDEF_H
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
Một số khác là trong đường dẫn /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/include/
, và đó là một trong đó là được sử dụng khi tôi nói #include <stddef.h>
. Nội dung của một người rất khác với nội dung đầu tiên, chứa các định nghĩa của ptrdiff_t
, size_t
, v.v.
Câu hỏi của tôi là: Cần đặt định nghĩa size_t
stddef.h
, tuy nhiên người đầu tiên không tuân theo điều đó. Đó rõ ràng không phải là một trong những tiêu chuẩn được đề cập trong tiêu chuẩn C/C++. Nếu tệp đó có sẵn cho một số mục đích khác, thì tại sao cả hai tệp này có tên là stddef.h
, sẽ không an toàn hơn nếu chúng có tên khác?
Điều đó trông khá cá, và từ bảo vệ đủ điều kiện dường như ngụ ý rằng nó không cố ý giả mạo như stddef.h. Bạn có thể kiểm tra xem nó đến từ đâu không? – Cheezmeister
@Cheezmeister: 'apt-file' sản lượng: ' linux-libc-dev:/usr/include/linux/stddef.h' và 'gcc-4.5:/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/include/stddef.h' – loudandclear
@Cheezmeister. Tôi thứ hai bạn. Không có tên đường dẫn '/ usr/include/linux/stddef.h' ngụ ý đó là tiêu đề ** tiêu chuẩn **. Không có 'stddef.h' trong'/usr/include' trong bản sao Linux của tôi (Slackware64 13). – shinkou