Tôi chạy vào một vấn đề thời gian gần đây mà ví dụ đồ chơi sau biên dịch sạch sử dụng clang -ansi
:'kêu vang mở rộng -ansi`
int main(void)
{
for (int i = 0; 0;);
return i;
}
nhưng gcc -ansi
cung cấp cho các lỗi sau:
a.c: In function ‘main’:
a.c:3:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
a.c:3:5: note: use option -std=c99 or -std=gnu99 to compile your code
Biên soạn với clang -ansi -pedantic
show rằng một phần mở rộng C99 đang được sử dụng.
a.c:3:10: warning: variable declaration in for loop is a C99-specific feature [-pedantic,-Wc99-extensions]
for (int i = 0; 0;);
^
1 warning generated.
Tiện ích mở rộng nào khác cho phép tùy chọn -ansi
? Làm thế nào tôi có thể vô hiệu hóa chúng?
Tôi chỉ cách đây vài phút chạy vào một vấn đề tương tự: clang cho phép biến được xác định sau mã thực thi trong cùng một khối - hợp pháp trong C99 nhưng phải là bất hợp pháp trong ANSI. – cdarke
Ví dụ đầy đủ ở trên cũng là bất hợp pháp trong C99, vì 'i' không được định nghĩa khi nó được sử dụng trong câu lệnh trả về. Clang và GCC đồng ý về điều này. Dường như cách sử dụng cụ thể này của phần mở rộng C99 làm cho nó hợp pháp. – cyang
bạn đã đúng, tôi đã không phát hiện ra rằng trong mã OPS (tập trung quá nhiều vào các vấn đề của riêng tôi). – cdarke