01/10/2018, 08:28
Ai có thể giải thích cho em tại sao kết quả lại bằng 248 ạ
#include <stdio.h>
#include <conio.h>
void main()
{
int m = 60, a = 0;
++m;
a += m * 3 + ++m;
printf_s("a = %d", a);
_getch;
}
Bài liên quan
Em tính kiểu gì ra 248 vậy?
++m = 61
a = ( 3 * 61 ) + (++)61 = 183 + 62 = 245
Đây anh
Em đã chỉnh lại build succeeded không lỗi. Nhưng vẫn ra 248.
Mình nghĩ cái này là undefined behavior.
gcc và clang cho kết quả 245 nhưng vc cho kết quả 248.
Vậy là vs tính bên phải trước à, nguy hiểm thật
Mình test cũng ra kết quả như thớt, không hiểu được nó lấy giá trị kiểu gì, nếu đổi thành m++ thì kết quả là 61*3 + 61 = 244, tách riêng thành
a += m*3;
vàa += ++m;
thì ra 245, còn để yên thì ra 248 O_oCái này là undefined behavior.
Khác nhau với từng compiler.
Nên tốt nhất là không dùng, không tìm hiểu. Bởi vì thực sự nó không mang lại cái lợi ích gì cả. Nhiều lúc sml không chừng.
Mấy cái này undefined, không nên hỏi kết quả bởi vì nó tùy vào thứ tự tính toán, mà cái này unspecified (tức là trình biên dịch muốn tính trước sau tùy thích và không có quy định), rủi ro chỉ đứng sau undefined.
Thôi, từ nay ra éo dùng ++ trong biểu thức kết hợp nữa Loạn vl
Thật á Xem ra quy định tiền toán tử giữa VC++ với VC# và giữa VC++ với các bản C++ khác là khác nhau à?