2009-12-29 26 views
8

Gần đây tôi đã bật tùy chọn -pedantic trên gcc và bây giờ tôi có khoảng hai hoặc ba trang của "ISO C90 cấm cảnh báo và mã" hỗn hợp "cảnh báo.Cảnh báo "Tuyên bố và mã" hỗn hợp, có đáng để giải quyết không?

Mục tiêu của tôi với dự án này là có thể triển khai nó trên bất kỳ hệ thống chính thống với trình biên dịch ac, vì vậy tôi nhận ra rằng sẽ không khôn ngoan khi cho rằng C99 sẽ được hỗ trợ ở mọi nơi, thời gian để giải quyết những cảnh báo này?

Có các hệ thống vẫn tồn tại với c trình biên dịch không hỗ trợ khai báo và mã hỗn hợp không?

+0

-Thông báo tăng đáng kể cảnh báo là, tốt, pedantic. Tôi sẽ nói những lời cảnh báo đó là một sự lãng phí thời gian cho các mục đích thực tế. –

Trả lời

6

Vâng, bạn có ý định viết mã của mình bằng C89/90 hoặc trong C99 không?

Vì đây là cảnh báo duy nhất bạn có vẻ quan tâm, rõ ràng mã của bạn đã thực sự được viết bằng C89/90. Nếu nó thực sự là như vậy và bạn có kế hoạch để dính với C89/90, sau đó tôi muốn dính vào C89/90 nghiêm ngặt và di chuyển tất cả các khai báo vào đầu khối.

Nếu, mặt khác, bạn sẵn sàng và lập kế hoạch chuyển sang C99, sau đó khai báo "không đúng chỗ" không còn là vấn đề nữa. Sau đó, mối quan tâm chính của bạn trở thành hỗ trợ nền tảng/trình biên dịch. Trình biên dịch MS Visual Studio C là các trình biên dịch C89/90. Đây co phải vân đê? (Xem xét rằng GCC có sẵn trên nền tảng Windows).

+0

Tôi không muốn tuân theo bất kỳ tiêu chuẩn cụ thể nào, tôi chỉ muốn tự tin rằng mã của tôi sẽ biên dịch trên bất kỳ trình biên dịch c chính nào –

+3

Trong trường hợp đó, câu trả lời là: không, nó sẽ không biên dịch trên bất kỳ trình biên dịch C nào. Trình biên dịch MS VIsual Studio tuân thủ C89/90 và nó sẽ không biên dịch mã như vậy. – AnT

1

Tôi không chắc mình sẽ thay đổi nó.

Tuy nhiên, nếu bạn quyết định bạn muốn, nó khá dễ dàng (vì vậy có lẽ bạn nên); Chỉ cần có tất cả các khai báo của bạn ngay sau khi bắt đầu một khối mã. Nếu bạn hoàn toàn phải định nghĩa chúng sau này, hãy sử dụng một khối mã lồng nhau khác.

1

IIRC, Visual C++ không cho phép khai báo và mã hỗn hợp trong chế độ C.

Visual C++ đã bị tụt lại phía sau trong hỗ trợ C99 nói chung. Tình hình có thể đã được cải thiện gần đây tuy nhiên, và nó có thể có thể biên dịch mã của bạn trong chế độ C++ anyway.

2

Trình biên dịch C của Visual Studio không cho phép khai báo và mã hóa. Microsoft có lẽ sẽ không bao giờ thêm hỗ trợ đầy đủ C99 cho Visual Studio; C không đủ quan trọng trong thế giới Windows.

5

Nếu bạn muốn là -pedantic về tiêu chuẩn C99, hãy thêm tùy chọn -std=c99.

Cá nhân tôi thích phong cách không trộn cũ hơn vì nó giúp dễ dàng kiểm tra trực quan loại bộ nhớ nào đang sử dụng và quyết định những gì có thể cần() - ing trước khi trở về.

0

Tôi sẽ loại bỏ cảnh báo cụ thể đó khi trộn mã và khai báo không phải là tính năng được hỗ trợ rộng rãi.

Thực ra tôi có cùng một vấn đề với thư viện tôi đang viết. Tôi đang sử dụng các macro variadic nhưng các macro này dường như được hỗ trợ nhiều hơn.

Để đảm bảo thư viện của tôi sẽ thực sự có thể sử dụng được bởi những người khác, tôi sẽ thử nghiệm nó với nhiều trình biên dịch có thể. Tôi đã thực hiện nó với Visual C++ Express và Pelles C và tôi sẽ thử một số khác (OpenWatcom, Mars C và lcc-Win32 ít nhất).

Thật không may SourceForge không còn cung cấp một trang trại trình biên dịch như nó được sử dụng để làm một số năm trước và tôi không thể kiểm tra nó trên các trình biên dịch Unix thương mại.

Các vấn đề liên quan