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.
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
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.) –
@ 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