Мой ответ: наверное. Это зависит от различий между средами.
Я бы сгенерировал список макросов, предопределенных препроцессором в gcc для каждой из ваших сред. Все, что вам нужно сделать, это создать пустой файл, скажем foo.h
, и выполнить следующую команду: gcc -E -dM foo.h
для каждой среды. Я бы перенаправил вывод в отдельный файл для каждой среды.
Затем сравните предопределенные макросы и найдите тот, который соответствует требованиям. В своем вопросе вы указали, что встроенная среда отличается от платформы Windows и Host Linux. Предполагая, что вы используете другую архитектуру микросхемы для встроенной среды, должен быть определен макрос, который указывает архитектуру. Например, в моей 64-битной Linux-системе определено __x86_64__
.
Получив эту информацию, используйте этот макрос в качестве условного значения:
#ifdef MACRO_INDICATING_EMBEDDED
// Behavior B
#else
// Behavior A
#endif