Tôi hiện đang viết C (không phải C++). Có vẻ như trình biên dịch C của Microsoft yêu cầu tất cả các biến được khai báo trên đầu của hàm.Tại sao trình biên dịch C của Microsoft lại muốn các biến ở đầu hàm?
Ví dụ, đoạn mã sau sẽ không vượt qua biên soạn:
int foo(int x) {
assert(x != 0);
int y = 2 * x;
return y;
}
Trình biên dịch báo cáo một lỗi ở dòng thứ ba, nói
error C2143: syntax error : missing ';' before 'type'
Nếu mã được thay đổi để được như dưới nó sẽ chuyển biên soạn:
int foo(int x) {
int y;
assert(x != 0);
y = 2 * x;
return y;
}
Nếu tôi thay đổi tên tệp nguồn từ .c
là .cpp
, quá trình biên dịch cũng sẽ chuyển.
Tôi nghi ngờ có một tùy chọn ở đâu đó để tắt tính nghiêm ngặt của trình biên dịch, nhưng tôi chưa tìm thấy nó. bất cứ ai có thể giúp đỡ về điều này?
Xin cảm ơn trước.
Tôi đang sử dụng cl.exe được chuyển bằng Visual Studio 2008 SP1.
Đã thêm:
Cảm ơn tất cả các bạn đã trả lời! Có vẻ như tôi phải sống ở C89 với cl.exe của Microsoft.
+1 .. nhưng không phải để nhắc tôi về những ngày xưa tồi tệ. –
Tôi đang tìm kiếm trợ giúp của cl.exe để có tùy chọn bật các tùy chọn C99. Nhưng cho đến nay tôi không có đầu mối về nó. Yêu cầu khai báo tất cả các biến ở trên cùng có vẻ vô cùng bất tiện. Nếu tôi sử dụng gcc để biên dịch mã, nó hoạt động. Điều này có nghĩa là cl.exe không hỗ trợ chuẩn C99? – yinyueyouge
Ryan: có vẻ như cl.exe KHÔNG hỗ trợ C99, điều này thật đáng kinh ngạc. Đã gần 10 năm rồi! – dwc