Ứng dụng lớn này có thư viện bộ nhớ trong hồ bơi sử dụng bộ nhớ trong để lưu trữ các nút bộ nhớ. Treap được thực hiện bằng cách sử dụng macro cpp và tệp trp.h hoàn chỉnh có thể được tìm thấy here. Tôi nhận được cảnh báo trình biên dịch sau khi tôi cố gắng để biên dịch ứng dụng:Giải mã cảnh báo trình biên dịch liên tục về hằng số thập phân chưa ký
warning: this decimal constant is unsigned only in ISO C90
Bằng cách xóa các phần của mã vĩ mô và sử dụng thử nghiệm và lỗi, cuối cùng tôi tìm ra thủ phạm:
#define trp_prio_get(a_type, a_field, a_node) \
(2654435761*(uint32_t)(uintptr_t)(a_node))
tôi Tôi không chắc con số lạ đó đang làm gì ở đó, nhưng tôi cho rằng nó có lý do chính đáng, vì vậy tôi chỉ muốn để nó một mình. Tôi muốn sửa chữa các cảnh báo mặc dù-bất kỳ ý tưởng tại sao trình biên dịch của nói rằng nó unsigned chỉ trong ISO C90?
EDIT: Tôi đang sử dụng gcc-4,1
Sẽ hữu ích khi cho chúng tôi biết bạn đang sử dụng trình biên dịch nào. – AndrejaKo
Cảnh báo cũng có lý do.Nó cho bạn biết rằng loại chữ đã thay đổi từ phiên bản C sang phiên bản C khác, vì vậy bất kỳ lý do chính đáng nào mà nhà phát triển ban đầu có thể sai, điều này có thể phá vỡ mã của bạn theo những cách thú vị. – gnasher729