Tôi hiện đang sử dụng chức năng popen
trong mã được biên dịch bởi hai trình biên dịch: MS Visual Studio và gcc (trên Linux). Tôi có thể muốn thêm gcc (trên MinGW) sau.Cách tiêu chuẩn nhất để chọn tên hàm tùy thuộc vào nền tảng?
Các hàm được gọi popen
cho gcc, nhưng _popen
cho MSVS, vì vậy tôi thêm vào sau vào mã nguồn của tôi:
#ifdef _MSC_VER
#define popen _popen
#define pclose _pclose
#endif
này hoạt động, nhưng tôi muốn tìm hiểu xem liệu có tồn tại một giải pháp tiêu chuẩn cho những vấn đề như vậy (tôi nhớ lại một trường hợp tương tự với stricmp
/strcasecmp
). Cụ thể, tôi muốn hiểu những điều sau:
- Có phải là
_MSC_VER
cờ phải phụ thuộc vào không? Tôi đã chọn nó bởi vì tôi có ấn tượng rằng môi trường Linux là "tiêu chuẩn hơn". - Nếu tôi đặt các số
#define
này vào một số tệp tiêu đề, điều quan trọng là tôi có#include
trước hoặc saustdio.h
(đối với trường hợppopen
)? - Nếu
_popen
được định nghĩa là macro, có khả năng số#define
của tôi sẽ không thành công? Tôi có nên sử dụng mã thông báo "mới" nhưmy_popen
thay vì, vì lý do đó hay cách khác không? - Có ai đó đã làm công việc này cho tôi và tạo một tệp "tiêu đề khả năng di động" tốt mà tôi có thể sử dụng không?
- Bất kỳ điều gì khác mà tôi cần phải biết?