Имеет ли смысл использовать ifdef linux и т.д в заголовке? - PullRequest
1 голос
/ 13 апреля 2019

Я прочитал несколько статей об использовании макроса #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).

Преимущество, которое я получаю от именования структуры по-разному, состоит в том, чтобы избежать конфликта имен в реализации.

Распространена ли такая практика написания условных макросов?Или мы должны по возможности избегать написания таких вещей.

1 Ответ

1 голос
/ 13 апреля 2019

Является ли обычной практикой такой условный макрос?Или мы должны по возможности избегать писать такие вещи.

На полпути между ними.

Лучше поместить разницу в файл .c, но не во избежание "по возможности".

Лучше хранить код, специфичный для платформы, из файлов .h, но не закон .

...