Я прочитал несколько статей об использовании макроса #ifdef #elif
и т. Д., Чтобы обеспечить реализацию для различных платформ, и почти все говорят, что его следует избегать, если это возможно, потому что его сложно поддерживать.Однако в настоящее время я рассматриваю его использование в заголовочном файле следующим образом:
#ifdef __linux__
typedef struct my_linux_struct my_struct
#elif __APPLE__
typedef struct my_macos_struct my_struct
#else
#error Platform not supported
#endif
Несмотря на то, что он служит для той же цели, реализация struct my_linux_struct
и struct my_macos_struct
полностью отличается.
Так что яиметь выделенный файл c
для каждой платформы, где определена структура платформы (struct my_linux_struct
или struct my_macos_struct
).
Преимущество, которое я получаю от именования структуры по-разному, состоит в том, чтобы избежать конфликта имен в реализации.
Распространена ли такая практика написания условных макросов?Или мы должны по возможности избегать написания таких вещей.