Tôi có một chương trình rất lớn biên dịch với gcc không có cảnh báo.Có cách nào để kích hoạt (int i = 0; ... trong gcc mà không phải bật chế độ c99
Nếu tôi quay về chế độ c99 --std = c99 trên dòng lệnh, nó mang lại một số lượng lớn các cảnh báo và lỗi.
Nhưng tôi yêu thành ngữ for(int i=0; i<20; i++){ code }
ở vị trí của {int i; for (i=0; i<20; i++){ code }}
có cách nào để nói với gcc để cho phép điều này và chỉ này?
Ngoài ra, có cách nào để kích hoạt chế độ c99 trong các chức năng cụ thể mà tôi đang làm việc không? Một cái gì đó như
#pragma c99 on
for(int i=0; i<99; i++)
{
code
}
#pragma c99 off
ANSI C cấm hỗn hợp kê khai và báo cáo vì một lý do . Bạn nên khai báo tất cả các biến của bạn ở trên cùng của hàm của bạn và đó là tất cả. Nếu bạn sợ mất chúng hoặc trộn chúng, hàm của bạn có quá nhiều dòng và bạn nên phân đoạn nó. – Eregrith
Điều gì sẽ xảy ra khi bạn thử biên dịch mã của bạn ở chế độ 'gnu99' (trái với' c99')? – NPE
Nhận xét này là viết tắt của "bỏ phiếu chống lại" của Eregrith. Có nhiều lý do tại sao C89 cho phép bạn định nghĩa các biến ở phía trên cùng của khối * bất kỳ *, không chỉ là một hàm chức năng như yêu cầu hướng dẫn kiểu của Eregrith. Ngoài ra còn có những lý do tốt tại sao vài ngôn ngữ khác và rất ít ngôn ngữ hiện đại, có bất kỳ yêu cầu nào như vậy. Không theo phong cách của Eregrith, ngay cả trong C89. Lý do tại sao C89 cấm kết hợp các định nghĩa và các câu lệnh khác là một yếu tố khá yếu - nó phần lớn là lịch sử vào năm 1989, và phải làm với các trình biên dịch cũ đã đặt các khung xếp chồng theo một cách khá đơn giản. –