2012-01-26 30 views
6

Tôi có một số nơi trong mã của tôi dòng tiếp theo: dài dài maxCPUTime = 4294967296;cpp: nhật thực không nhận ra 'long long' loại

(số kiểu long lớn nhất có thể là 4294967296 -1, vì vậy tôi sử dụng lâu dài)

vấn đề là, khi tôi biên dịch, tôi nhận được lỗi sau:

error: integer constant is too large for ‘long’ type 

của nó như nếu, eclips không nhận ra rằng tôi đã viết 'lâu dài' và nó nghĩ rằng tôi đã viết 'dài'.

(Tôi đang sử dụng hệ điều hành Linux)

bất kỳ ai biết tại sao tôi gặp phải lỗi này?

+1

Không quen thuộc với nhật thực, nhưng nếu là tôi, tôi d thử 'int64_t' hoặc' uint64_t' cho loại. –

+1

@Mr Lister: loại biến không phải là vấn đề ở đây. – vitaut

+0

@kakush Bạn sẽ không chấp nhận một trong những câu trả lời? – sashoalm

Trả lời

6

Nối LL với nó:

long long maxCPUTime = 4294967296LL; 

Điều đó sẽ giải quyết vấn đề. (LL được ưu tiên hơn ll vì dễ phân biệt hơn.)

long long chưa được thêm chính thức vào tiêu chuẩn cho đến C99/C++ 11.

Thông thường, các chữ số nguyên sẽ có loại tối thiểu để giữ. Nhưng trước khi C99/C++ 11, long long không "tồn tại" trong tiêu chuẩn. (nhưng hầu hết các trình biên dịch đã có nó như là một phần mở rộng) Vì vậy, do đó (theo một số trình biên dịch) số nguyên literals lớn hơn long không nhận được loại long long.

+1

Không 'ull' có nghĩa là 'unsigned long long', trong khi anh ta muốn một' long long'? –

+0

Chỉ cần nhận thấy điều đó. Cảm ơn bạn đã trỏ nó. – Mysticial

+1

Mẹo: Sử dụng vốn 'L' thay vì chữ thường' l'. Cả hai biên dịch, nhưng đối với con người, 'L' dễ phân biệt hơn (trong hầu hết các phông chữ) từ' 1'. – Johnsyweb

5

Vấn đề là thường xuyên của bạn (4294967296) không phù hợp với intunsigned int (trên thực tế nó không phù hợp với long cũng - đó là những gì trình biên dịch đang nói) và không được tự động thăng long long, do đó các lỗi . Bạn phải thêm hậu tố LL (hoặc ll mặc dù sau này có thể bị nhầm lẫn bởi những người thiển cận như tôi cho 11) để làm cho nó long long:

long long maxCPUTime = 4294967296LL; 
Các vấn đề liên quan