30/09/2018, 16:03

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
", ++i, ++i);
    return 0;
}
  • A. 3, 4
  • B. 4, 3
  • C. 4, 4
  • D. Output may vary from compiler to compiler
Nguyễn Minh Dũng viết 18:12 ngày 30/09/2018

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.

Đỗ Trung Quân viết 18:13 ngày 30/09/2018

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

Đỗ Trung Quân viết 18:13 ngày 30/09/2018
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.

Lê Đình Huy viết 18:09 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:06 ngày 30/09/2018

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à.

Tran Huan viết 18:15 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:10 ngày 30/09/2018

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

Bài liên quan
0