2011-07-14 76 views
6

Trong khi đọc Is this proper C declaration? If so, why does it not work? Tôi đã suy nghĩ vềViệc triển khai C có thể bao gồm tiêu đề chuẩn khi bao gồm một tiêu đề khác không?

#include <stdio.h> 

int main(void) { 
    int bool = 0; 
    return bool == 0; 
} 

là chương trình này phù hợp chặt chẽ? Nói cách khác, có phải là stdio.h được phép bao gồm stdbool.h hoặc bị cấm không? Điều này có được chỉ định bởi thông số kỹ thuật không?

Trả lời

5

C tiêu đề chuẩn không thể bao gồm các tiêu đề khác. Điều này khác với C++, nơi nó được cho phép một cách rõ ràng.

C99 tiêu chuẩn, phần 7.1.3

Mỗi tiêu đề tuyên bố hoặc định nghĩa tất cả các định danh được liệt kê trong mục liên quan [...] Không định danh khác được dành riêng.

+0

Trong khi tôi tin tưởng bạn, bạn có thể cho chúng tôi một số tham chiếu (ví dụ: K & R) không? –

+0

Hmm, nếu một tiêu đề bao gồm một tiêu đề khác thì chương trình của tôi có hiệu quả bao gồm hai tiêu đề. Sau đó, các định danh của cả hai tiêu đề được bảo lưu, có vẻ như vậy. Hoặc là bao gồm một tiêu đề khác bất hợp pháp vì không có quy tắc rõ ràng cấp này? –

+0

@Johannes - Từ những gì tôi hiểu, ý tưởng là một tiêu đề nhất định chỉ có thể bao gồm tên được chỉ định và thường được đặt tên (đó là [...]). Nếu bạn muốn định nghĩa 'bool', bạn nên bao gồm . Nếu không nó chỉ là '_Bool', và bạn có thể sử dụng bool như trong ví dụ của bạn. –

3

Tôi không chắc chắn nếu nó có thẩm quyền trong bất kỳ cách nào, nhưng đây là những gì Plauger nói (cấp cho nó cho c89).

Thư viện chuẩn C cung cấp mười lăm tiêu đề chuẩn. Các tiêu đề có một số thuộc tính

Chúng độc lập với nhau. Không có tiêu đề chuẩn nào yêu cầu một tiêu đề chuẩn khác được đưa vào đầu tiên để nó hoạt động bình thường. Cũng không có tiêu đề chuẩn nào bao gồm tiêu đề chuẩn khác.

Tôi không thể tìm thấy bất kỳ đề cập nào về điều này trong c99 hoặc c89.

EDIT

tôi có thể thấy inttypes.h bao gồm stdint.h

7.8-1

Tiêu đề <inttypes.h> bao gồm tiêu đề <stdint.h> và mở rộng nó với cơ sở bổ sung được cung cấp bởi việc triển khai tổ chức.

Các vấn đề liên quan