2010-05-23 24 views
9

Tôi có đoạn mã này và tôi không biết làm thế nào nó hoạt độngkhởi Weird trong C

#include <stdio.h> 

int main(void) 
{ 
    int numero = ({const int i = 10; i+10;}); 

    printf("%d\n", numero); // Prints 20 

    return 0; 
} 

Tại sao nếu tôi xóa phần thứ hai (i + 10;), trình biên dịch được một lỗi? Tại sao các dấu ngoặc vuông cần thiết?

Cảm ơn bạn ^^!

Trả lời

13

Đó là GCC statement expression. Nó thực thi các câu lệnh trong nó và trả về giá trị được đánh giá trong câu lệnh cuối cùng. Do đó numero được khởi tạo thành 20. Nếu bạn xóa phần thứ hai, không có biểu thức nào là câu lệnh cuối cùng, vì vậy nó không thể nhận được một giá trị từ biểu thức câu lệnh.

Niềng răng là cần thiết để phân biệt nó với các biểu thức được lồng tiếng C thông thường.