2011-10-17 31 views
5

xem xét:Tại sao sản lượng khác trong C và Java trong biểu thức m ++ + (++ m)

int m = 2, n; 

n = m++ + (++m); 

Trong đầu ra C là:

m = 4, n = 4; 

Trong đầu ra Java là:

m = 4, n = 5; 

Điều này xảy ra như thế nào?

+0

trình biên dịch nào bạn sử dụng? cùng một mã cho m = 4 và n = 6 cho tôi (Visusal Studio 2010) –

+0

Đó là bởi vì bạn không thể thay đổi cùng một biến hai lần trong một câu lệnh mà không có trình tự điểm. Điều đó gây ra hành vi không xác định trong C. – Dani

+0

Tôi đang sử dụng gcc. – phoxis

Trả lời

9

Điều này có thể khác vì C không cho phép chương trình đúng chứa biểu thức như vậy - C không xác định hành vi của chương trình như vậy. Điều này cung cấp cho C trình biên dịch vĩ độ rộng trong cách chúng diễn giải các biểu thức như vậy.

Java thực thi ràng buộc chặt chẽ hơn bằng cách xác định hành vi mong đợi của các biểu thức như thế này.

(Quy tắc mà điều này vi phạm trong C là biểu thức không thể sửa đổi giá trị của một đối tượng nhiều lần mà không có điểm chuỗi can thiệp).

+1

"C không cho phép chương trình chính xác chứa biểu thức như vậy". Có nó; nó chỉ không xác định hành vi của nó. Không giống nhau. – EJP

+0

@EJP: Chương trình như vậy không chính xác. – caf

+0

nếu chương trình như vậy là không chính xác trình biên dịch không nên biên dịch nó. – EJP

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