В приведенном ниже коде C я не знаю, когда FUN(xxx) == E_OK
может быть неудовлетворительным, например. какая-то ошибка в fun1(xxx)? Кроме того, я не знаю, как описать оператор (xx, yy)
на языке C.
#define FUN(arg) (fun1(arg), E_OK)
//...
{
if (FUN(xxx) == E_OK)
{
//...
}
}
Это похоже на грязный хак, позволяющий по какой-либо причине обойти возвращаемые значения функции. Может быть, это часть отладочной сборки, когда не все ресурсы, необходимые программе, доступны?
Интересно, почему кому-то пришло в голову такое? Вместо этого зверя можно было бы просто отбросить if
и игнорировать возвращаемое значение. Используются ли какие-то промежуточные уровни макросов, которые могут привести к тому, что FUN
будет чем-то другим? Или какие-то условные определения?
#define FUN(arg) (fun1(arg), E_OK)
FUN(xxx) == E_OK
может быть неудовлетворен,
Это невозможно, поскольку здесь используется ,
(оператор-запятая). При использовании в выражении используется результат последней операции, который в данном случае равен E_OK
.
Я не знаю, как описать оператор «(xx, yy)» на языке C.
Это называется оператор запятая
Стандарт C: 6.5.17
Левый операнд оператора запятой оценивается как пустое. выражение; после его оценки существует точка последовательности. Тогда оценивается правый операнд; результат имеет свой тип и значение.97) Если предпринята попытка изменить результат оператора запятой или получить к нему доступ после следующей точки последовательности, поведение не определено.
Вы спрашиваете, когда/может ли
FUN(xxx) == EOK
быть ложным?