2009-06-09 43 views
6

Tài nguyên nào tồn tại để hỗ trợ viết mã C/C++ hoạt động trên nhiều nền tảng và trình biên dịch? Ví dụ: tôi thường xuyên thấy mình đặt câu hỏi như:Tài nguyên cho phát triển C/C++ đa nền tảng

  • Macro tiền xử lý nào được tự động xác định trong các trình biên dịch và môi trường khác nhau? (Ví dụ __GCC__, WIN32, __WIN32__, __CYGWIN__)
  • Những phiên bản của trình biên dịch và các thư viện tiêu chuẩn hỗ trợ tương đối mới chức năng "tiêu chuẩn" (ví dụ như C99 dài gấp đôi lượng giác chức năng sinl(), cosl(), ...)
  • Chức năng nào có sẵn trên các nền tảng khác nhau để thực hiện các tác vụ điển hình, khi không có chức năng cầm tay đơn lẻ nào tồn tại? (ví dụ: nhận được thời gian hiện tại với độ chính xác phụ thứ hai)

Tôi thường viết mã phải biên dịch dưới Linux/gcc, cygwin, mingw32 và Visual Studio và thường xuyên phải so sánh ghi chú từ nhiều nguồn (Linux trang người đàn ông, MSDN, tài liệu trình biên dịch) để có được thông tin tôi cần. Đây phải là một vấn đề mà các nhà phát triển chạy vào mọi lúc - liệu có bất kỳ tài nguyên nào biên dịch thông tin này thành một tham chiếu dễ tiêu hóa không?

(Đối với câu hỏi này tôi không đặc biệt quan tâm trong các thư viện cross-platform như wxWidgets hoặc thúc đẩy. Tôi quan tâm nhiều hơn vào nguồn hoặc kỹ thuật mà có thể giúp ai đó viết thư viện nền tảng của mình hoặc chương trình.)

EDIT: Đây là ví dụ về loại trang mà tôi đang tìm kiếm: http://predef.sourceforge.net/precomp.html. Một khảo sát tốt đẹp về các trình biên dịch/môi trường khác nhau và các macro tiền xử lý có thể được sử dụng để nhận dạng chúng. Thật tuyệt vời khi tìm một tài nguyên tương tự so sánh các hàm gần tương đương trên các nền tảng (như gmtime_r() hoặc ftime() trong Linux vs _gmtime_s() hoặc _ftime() trong Windows) khi không có hàm chung nào tồn tại.

+0

như thế nào sử dụng tăng và wxWidgets không phải là một chiến lược để viết cross-nền tảng mã tương thích? Nó giống như yêu cầu một cái gì đó có vị như nho nhưng không phải là tất cả "grapie". – Kieveli

Trả lời

1

Cách cơ bản mà bạn viết về viết mã đa nền tảng là viết mã không phụ thuộc vào nền tảng cụ thể. Ví dụ, hầu như tất cả các tiện ích UNIX ban đầu có thể được viết mà không cần tham chiếu đến một nền tảng cụ thể. Viết mã phụ thuộc vào các macro cụ thể bằng cách sử dụng trình biên dịch có điều kiện không phải là cách thực hành tốt nhất.

+0

Về nguyên tắc tôi đồng ý và tôi làm điều này bất cứ khi nào có thể, nhưng có rất nhiều trường hợp không có chức năng chung giữa các nền tảng cho một số tác vụ cấp thấp. Ví dụ, nếu bạn muốn có được thời gian hệ thống chính xác đến mili giây, bạn có thể sử dụng ftime() trên Linux, nhưng trên Windows nó được gọi là _ftime().Một ví dụ khác, trong một bản xây dựng Linux, bạn có thể muốn đường dẫn cấu hình mặc định của mình được đặt thành ~/.myprogram, trong khi trên Windows, nó phải ở trong% APPDATA% \ MyProgram. –

1

Nó thực sự phụ thuộc vào dự án cụ thể của bạn, nhưng tôi sẽ cố gắng

  • dính mã phù hợp tiêu chuẩn ISO và POSIX nếu có thể;
  • sử dụng -Wall và loại bỏ tất cả cảnh báo;
  • xem autoconf và autotoolset cho dù chúng có thể trợ giúp hay không.
Các vấn đề liên quan