#c
#c
Вопрос:
Я планирую вызвать функцию test_func
.
Один из способов — определить переменную и отправить ее адрес, например:
int dummy;
test_func(amp;dummy);
Это работает нормально. Но что, если я решу избежать определения фиктивной переменной? Такая реализация завершается ошибкой компилятора:
test_func(amp;int());
main.c ~~~ (onlinegdb)
#include <stdio.h>
int action(int *x)
{
int error_code=0;
*x=123;
return error_code;
}
int test_func(int *x)
{
if(action(x))
{
printf("success!n");
return 0;
}
else
{
printf("failue!n");
return 1;
}
}
int main()
{
test_func(amp;int());
return 0;
}
Как я могу вызвать эту функцию таким образом?
Комментарии:
1. Зачем вам нужно это делать?
2. Я не думаю, что ты сможешь это сделать. Если функция принимает аргумент указателя, вам нужно дать ей указатель на что-то. В C. Нет временных фиктивных указателей, я думаю, что C может это сделать, но не C.
3. Если вы не хотите предоставлять полезную ценность, почему бы просто не использовать
NULL
и не добавить соответствующие проверки?4. @Gerhardh, отмена ссылок
NULL
— это UB. Добавлениеif
инструкции — это дополнительная ненужная проверка.
Ответ №1:
Хотя проще всего просто использовать переменную, вы можете получить то, что ищете, с помощью составного литерала:
test_func(amp;(int){1});
Комментарии:
1. поскольку
C
это приводит к ошибкеerror: taking address of rvalue [-fpermissive]
при компиляции. Есть ли способ для C ?