В моей среде разработки некоторые вызовы ioctl
терпят неудачу в первый раз, если я снова вызываю то же ioctl
, что и возвращение. Это связано с некоторыми проблемами синхронизации времени, связанными с оборудованием.Как вызвать функцию несколько раз внутри макроса в C?
Таким образом, мы будем в течение некоторого временного решения, как маскировка все ioctl
одним MACRO
, внутри этого MACRO
вызывающему ioctl
три раза.
но это MACRO
сбор сбор ошибок. Пожалуйста, предложите некоторое решение для решения этой проблемы.
Пример кода
#include <stdio.h>
int func (int a, int b, int c)
{
return -1;
}
#define IOCTL_WRAPPER(a,b,c) \
{ \
int i = 0, retval = 0; \
while (i < 3) \
{ \
retval = func (a, b, c); \
if (retval != -1) \
{ \
break; \
} \
i++; \
} \
retval; \
}
int main()
{
int RetVal = 0;
RetVal = IOCTL_WRAPPER(1, 2, 3);
if (RetVal != -1)
{
printf ("\n pass \n");
}
else
{
printf ("\n fail \n");
}
return 0;
}
Ошибка компиляции
a.c: In function âmainâ:
a.c:9:13: error: expected expression before â{â token
{ \
^
a.c:27:14: note: in expansion of macro âIOCTL_WRAPPERâ
RetVal = IOCTL_WRAPPER(1, 2, 3);
^
Мы не можем использовать функцию для этой цели, так как одновременный доступ У вызовов может привести к вопросы. –
Этот комментарий не имеет смысла, Хакким. Если использование функции может привести к одновременному доступу к вызовам ioctl, так что может быть макрос. Выражения могут выполняться только в функции. – Peter
@HakkimAnsari Зачем вам нужен макрос? Почему вы не можете просто обернуть это нормальной функцией? Ваш комментарий действительно не вызывает чувства. Это выглядит как проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –