Есть ли способ typedef функции для изменения аргумента в C? - PullRequest
1 голос
/ 16 января 2020

У меня есть код, который должен вызывать sleep для windows и linux.

В попытке избежать размещения ifdefs везде, где есть Sleep, я сделал следующее

typedef Sleep sleep

Проблема в том, что windows засыпает в микросекундах, а linux засыпает в секундах. Есть ли способ сделать что-то вроде этого псевдокода.

typedef Sleep(x) sleep(x/1000)

Ответы [ 2 ]

4 голосов
/ 16 января 2020

Нет, вы не можете использовать typedef для этой цели.

Однако вы можете написать следующий препроцессор макрос:

#if defined( _WIN32 ) || defined( _WIN64 )
#define MY_SLEEP_MACRO( x ) Sleep(x)
#else
#define MY_SLEEP_MACRO( x ) sleep((x)/1000)
#endif

Теперь в вашем коде Вы можете просто позвонить MY_SLEEP_MACRO( 5000 );, чтобы подождать 5 секунд на обеих платформах.

1 голос
/ 16 января 2020

Нет. typedef определяет новое имя для типа.

Если вы хотите избежать #ifdef s повсеместно, вы можете создать функцию-оболочку, которая принимает, скажем, миллисекунды в качестве своего параметра, а затем внутренне имеет #ifdef вместе с любым необходимым преобразованием в секунд от миллисекунд.

...