Можно ли ссылаться на возвращаемое значение функции в C? - PullRequest
0 голосов
/ 17 февраля 2011

Можно ли как-то ссылаться на значение, которое я возвращаю из функции?Пример объясняет лучше:

CFTypeRef foo()
{
    CFTypeRef valueRef = NULL;
    bar(&valueRef); // fills valueRef with some data
    return valueRef;
}

Я думал, что было бы неплохо переписать это как:

CFTypeRef foo()
{
    bar(&__retvalue);
}

Где, конечно, __retvalue будет магическим токеном.Имеет ли это смысл?Возможно ли это сделать?Если нет, то почему?

Ответы [ 4 ]

3 голосов
/ 17 февраля 2011

Это невозможно.На низком уровне возвращаемое значение обычно возвращается в регистр процессора, что делает невозможным его передачу в качестве ссылки.

2 голосов
/ 17 февраля 2011

а) Это имеет смысл.б) нет такого волшебного жетона.в) «Если нет, то почему»?вопрос просто причудливый ... Почему нет такого волшебного жетона?Потому что дизайнеры языка никогда не думали об этом или, думая об этом, не думали, что это было бы полезно добавить в язык.(Кто-то упоминал, что возвращаемое значение обычно хранится в регистре, но это не имеет значения; компилятор может сгенерировать код для загрузки этого регистра из переменной в памяти, точно так же, как это происходит в вашем текущем foo).

1 голос
/ 17 февраля 2011

Вероятно, нет.

Может быть, вы могли бы определить макрос, если хотите сделать код чище?

0 голосов
/ 17 февраля 2011

Вы можете заставить bar () возвращать свой аргумент. Вы бы сохранили строку кода, если в этом суть.

CFTypeRef foo()
{
    CFTypeRef valueRef = NULL;
    return bar(&valueRef);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...