C отправить фиктивное целое число в качестве ссылочного указателя без определения переменной

#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 ?