Obecnie używam funkcji popen
w kodzie, który jest kompilowany przez dwa kompilatory: MS Visual Studio i gcc (na Linuksie). Mogę później dodać gcc (na MinGW).Najbardziej standardowy sposób wyboru nazwy funkcji w zależności od platformy?
Funkcja nazywa popen
dla gcc, ale _popen
dla MSVS, tak I dodaje następujące do mojego kodu źródłowego:
#ifdef _MSC_VER
#define popen _popen
#define pclose _pclose
#endif
To działa, ale chciałbym zrozumieć, czy istnieje standardowe rozwiązanie takie problemy (pamiętam podobny przypadek z stricmp
/strcasecmp
). W szczególności chciałbym zrozumieć:
- Czy to jest flaga z prawej strony, na której można polegać? Wybrałem to, ponieważ mam wrażenie, że środowisko Linux jest "bardziej standardowe".
- Jeśli umieściłem te
#define
w pliku nagłówka, czy ważne jest, czy I#include
to przed czy postdio.h
(dla przypadkupopen
)? - Jeśli
_popen
jest zdefiniowane jako samo makro, czy istnieje ryzyko, że mój#define
zakończy się niepowodzeniem? Czy zamiast tego powinienem użyć "nowego" tokena, takiego jakmy_popen
, z tego czy innego powodu? - Czy ktoś już wykonał dla mnie tę pracę i wykonał dobry plik nagłówka przenośności, którego mogę użyć?
- Coś jeszcze powinienem wiedzieć?