thử nghiệm (c/cpp)Tại sao có nhiều gia số/giá trị hợp lệ trong C++ nhưng không có trong C?
#include <stdio.h>
int main(int argc, char** argv)
{
int a = 0, b = 0;
printf("a = %d, b = %d\n", a, b);
b = (++a)--;
printf("a = %d, b = %d\n", a, b);
return 0;
}
Nếu tôi tiết kiệm ở trên như một tập tin cpp, nó biên dịch và kết quả này khi thực hiện:.
a = 0, b = 0
a = 0, b = 1
Tuy nhiên, nếu tôi lưu nó dưới dạng tệp .c, tôi nhận được lỗi sau:
test.c:7:12: error: lvalue required as decrement operator.
Không nên thao tác (++a)
trước (newValue)--
hoạt động? Có ai có bất cứ cái nhìn sâu sắc về điều này?
'b = (++ a) -;' <- không phải là ** hành vi chưa xác định **? – LihO
@LihO: Tại sao? Giá trị gia tăng trên 'a' được giải trình tự trước khi đánh giá –
Tại sao không chỉ' b = a + 1' –