В настоящее время я использую функцию popen
в коде, который скомпилирован двумя компиляторами: MS Visual Studio и gcc (в Linux). Возможно, я захочу добавить gcc (в MinGW) позже.
Функция называется popen
для gcc, но _popen
для MSVS, поэтому я добавил в свой исходный код следующее:
#ifdef _MSC_VER
#define popen _popen
#define pclose _pclose
#endif
Это работает, но я хотел бы понять, существует ли стандартное решение для таких проблем (я вспоминаю аналогичный случай с stricmp
/ strcasecmp
). В частности, я хотел бы понять следующее:
_MSC_VER
правильным флагом, от которого следует зависеть? Я выбрал его, потому что у меня сложилось впечатление, что среда linux «более стандартна». #define
в какой-то файл заголовка, важно ли я #include
это до или после stdio.h
(для случая popen
)? _popen
определяется как сам макрос, есть ли вероятность того, что мой #define
не сработает? Должен ли я использовать вместо этого «новый» токен, например my_popen
, по той или иной причине?