Poll: Kiểm tra kiến thức C - 2.4

Các bạn thảo luận đáp án nhé, bài test lấy từ http://www.indiabix.com/online-test/c-programming-test/12
4.What will be the output of the program?

#include<stdio.h>
int main()
{
    int i=2;
    printf("%d, %d\n", ++i, ++i);
    return 0;
}
  • A. 3, 4
  • B. 4, 3
  • C. 4, 4
  • D. Output may vary from compiler to compiler
5 Likes

Bài này hay, tưởng C. 4, 4 mà không phải đâu. Vấn đề nó nằm ở chỗ là thao tác ++, ++ này có được định nghĩa hay chưa.

2 Likes

Hớ hớ =)))) Cái này tùy trình biên dịch nha

The order of evaluation of arguments passed to a function call is unspecified.

Anyhow, we consider ++i, ++i are Right-to-Left associativity. The output of the program is 4, 3.

In TurboC, the output will be 4, 3.

In GCC, the output will be 4, 4.

1 Like

nghĩa là tùy chương trinh mà nó ra kết quả khác nhau hả bạn ?

Tùy compiler . Vì thao tác này chưa được định nghĩa trong chuẩn của ngôn ngữ. Thành ra không thể nói là làm như thế nào mới đúng được. Mỗi compiler có cách xử lý riêng.

Ví dụ ở VN mọi người hay ăn bằng đũa, nhưng nếu ăn bốc không bị cấm thì việc ăn bốc ở nhà này cho phép, nhà khác không cho phép. Tùy nhà.

1 Like

Rất thú vị, đã test trên VC9, GCC 4.6.3, GCC 4.8.1 đều cho kết quả 4, 4

2 Likes

Dù có cho kết quả giống nhau cũng không thể chọn C. 4,4 được. Đó là sự trùng hợp ngẫu nhiên hay cố tình ta :smiley:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?