Hiển thị kết quả từ 51 đến 53 / 53
Chủ đề: i++ và ++i
-
21-07-2012 23:49 #51
Kinh rợn thật, đã là trường hợp tiêu chuẩn từ chối không xác định mà cứ ít bữa lại có một tay bới lên cố gắng giải thích.
Trình dịch có bổn phận phải tuân thủ theo tiêu chuẩn. Một khi tiêu chuẩn đã nói là không xác định thì trình dịch có quyền dịch theo lô gic của mình. Kết quả sẽ ra khác nhau tuỳ theo cách làm việc của trình dịch.
Người nào tính ra kết quả số này số nọ chỉ là tự dùng lô gic lý luận của mình mà không cần để ý đến việc mỗi ngôn ngữ có tiêu chuẩn riêng của nó.
@ueih: lý luận của bạn có thể đúng với Visual C++. Nhưng Visual C++ là ngôn ngữ đưoc thêm mắm dặm muối Microsoft và không có một thời điểm nào Microsoft tuyên bố rằng ngôn ngữ của họ tuân thủ theo tiêu chuẩn Ansi C hay C++ cả.
-
30-08-2012 11:40 #52
Registered User
- Tham gia
- 02-08-2009
- Bài viết
- 50
- Like
- 0
- Thanked 3 Times in 3 Posts
bài này mình hình như đã trả lời rồi
b = a++ + ++a; tức b=21 và a = 12
printf("%d %d %d %d",b,a++,a,++a);
ở đây nếu là c++ thì hàm printf sẻ đi từ phải sang trái tứ ++a --> a --> a++ cuối cùng là b
vậy kết quả sẻ là 21, 13, 13, 13 và giá trị a sẻ là 14 vì a++ có nghĩa là mang giá trị của a vào hàm printf sau đó mới tăng a = 14
Nếu là visual basic "có hàm printf" thì sẻ đi ngược từ trái sang phải: b --> a++ --> a cuối cùng là a++
vậy kết quả sẻ là 21, 12, 13, 14
Ở bài này tác giã muốn người học phải hiểu một hàm giống nhau với ngôn ngữ này hay ngôn ngữ khác sẻ ra kết quả khác nhau nếu không nắm được từ trái qua hay từ phải qua
-
30-08-2012 12:38 #53
Registered User
- Tham gia
- 02-08-2009
- Bài viết
- 50
- Like
- 0
- Thanked 3 Times in 3 Posts
Hi ban megaownge và Zodiac123
Thanks cho ý kiến của bạn, khi mình trả lời mình chưa đọc bài viết của bạn (bởi khi mở lên phần đầu không có ý kiến bạn nên mình dọc sót sau đó mới thay có tới 50 ý kiến trong câu hỏi này nên mình xem lại)
Vấn đề là trả lời kết quả câu hỏi b = a++ + ++a chứ không tranh cải chuẩn C hay Ansi C hay C++ và chuẩn riêng của Microsoft. Ở đây tác giã đưa bài có lẻ cũng rất am hiểu sự khác biệt của các chuẩn này nên đưa ra bài toán thách đố chơi (chính mình cũng thấy sai lầm khi đọc bài của bạn zodiac123 ở asembly code). Và có lẻ chính tác giả cũng khuyên người viết C "nói chung" nên viết tường minh là b = (a++) + (++a) thì sẻ kết quả giống nhau dù là borland C hay Microsoft C hay visual studio 2005 hay 2008 cũng vậy.
Mình không dám kết luận nhưng "có vẻ" chuẩn C "nói chung" không quy định cộng a++ hay ++a trước (mã Asembly của bạn zodiac123 cho thấy visual studio 2005 đã cộng ++a trước rồi a++ sau)
Dù sau thì bài này cũng rất hay vì chính mình cũng bị mắt lừa kết quả của b = a++ + ++a
Thanks 2 bạn, mình thích giao tiếp với người có trình độ khá để học hỏi thêm



Quote
Bookmarks