2016-07-21 14 views
28

Lý do cảnh báo gcc -Wlong-long là gì?Tại sao gcc có cảnh báo lâu dài?

Từ trang man gcc:

-Wlong-long 
     Warn if long long type is used. This is enabled by either -Wpedantic or -Wtraditional in ISO C90 and C++98 modes. To inhibit the warning messages, use -Wno-long-long. 

Theo tôi được biết, long long được yêu cầu phải có ít nhất 64-bit (thực tế nó luôn luôn là 64-bit, ít nhất là với các trình biên dịch hiện nay). Đây có phải là trường hợp của ISO C90 hoặc C++ 98 hoặc có một số lý do khác không sử dụng long long không?

tôi biết về <stdint.h> loại như int64_t và bạn bè, nhưng một số trình biên dịch không quá cũ (ví dụ VS2005, và Green Hills ARM 3.5) không cung cấp <stdint.h>, và tôi nghĩ long long sẽ (ít nhất) 64 bit cho những công cụ và các công cụ mới hơn.

+0

Trình biên dịch không có 'stdint.h' không tuân thủ C99, có nghĩa là có tỷ lệ cược tốt mà chúng không có 'long long' chút nào! (Trừ khi họ là phiên bản cũ của GCC.) – zwol

+0

Từ mô tả cho nó có vẻ giống như các trình biên dịch "không quá cũ" của Patrick có cùng danh mục như gcc của 90 - 'long long' không có' stdint.h' (ngoại trừ thông qua hầu hết những năm 90, chúng tôi đã có lý do C99 chưa được viết, cộng với lý do cho rằng các CPU "thông thường" không có thanh ghi nguyên 64 bit, do đó thiếu số nguyên 64 bit trong số các loại C cơ bản làm cho một số ý nghĩa.) –

+0

@ WumpusQ.Wumbley: C được thiết kế để có thể sử dụng được (và trong những năm 1980 trên thực tế thường được sử dụng) trên bộ vi xử lý 8 bit; phải thực hiện bổ sung dài trong bốn bước là hơi khó chịu, nhưng ngay cả khi con số được biết là không lớn hơn 16777215 sự tiện lợi của việc có thể hoạt động trên một số lượng là giá trị hiệu suất cống của việc sử dụng bốn bước thay vì ba. Có rất ít trường hợp sử dụng loại 8 byte sẽ là chính đáng. IMHO, biện pháp khắc phục thích hợp sẽ là tạo ra "lâu dài" một tính năng tùy chọn, ít nhất là cho việc triển khai tự do. – supercat

Trả lời

32

Không có loại long long nào được nêu trong ISO C90 và C++ 98. Nó chỉ được thêm vào trong ISO C99 và C++ 11.

GCC đã cung cấp tiện ích mở rộng đó trước khi chuẩn hóa.

+19

... một ví dụ hiếm hoi về phần mở rộng gcc đã được chuẩn hóa với cùng ngữ nghĩa –

+0

Vì vậy, lý do để cung cấp cảnh báo như vậy sẽ giúp đảm bảo mã của bạn biên dịch với các trình biên dịch không tuân thủ C99 hoặc C++ - 11. – Patrick

+6

@Patrick có, và tôi nghĩ rằng tùy chọn chỉ tồn tại bởi vì ai đó đã quyết định rằng tất cả các cảnh báo được kích hoạt bởi '-ansi -pedantic' sẽ được thể hiện bằng các tùy chọn' -Wfoo' của riêng chúng. Không có lý do gì để sử dụng '-Wlong-long'. Ồ, nhưng '-Không dài-dài' có ý nghĩa hơn. –

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