2015-02-02 4 views
0

Я искал ответ для этого около часа, и я очень новичок в C. Я получаю предупреждение «левый операнд выражения запятой не влияет», когда ссылаясь на этой линиикак вернуть несколько переменных в функцию

return studio, one, two; 

оператор не возвращает переменные один или два, насколько мне известно, от чего моя функция печати показывает. Это правильный способ вернуть несколько переменных в C или я делаю это неправильно? Это первый раз, когда я должен был это сделать, и мы не обсуждали это в своем классе. Извиняется заранее за (я уверен) очень простое решение.

+0

Если этот синтаксис разрешен (а это не так), как бы вы назвали эту функцию? –

+1

@ 500-InternalServerError да, но он отбрасывает оба первых выражения после их оценки. – Quentin

+0

@Quentin: Ну, допустимо, но неуважительно, тогда :) –

ответ

2

Вы не можете возвращать несколько значений в C. Вы можете достичь такого же (хотя и не идентичного) эффекта одного из:

  • возвращает структуру или (указатель на концептуальный) массив.
  • записи на несколько указателей, переданных в качестве параметров
+1

Обратите внимание, что вы не можете вернуть фактический массив. – Quentin

+0

Обратите внимание: если вы вернете указатель на массив, вам придется беспокоиться о распределении памяти. Вложение массива в структуру позволяет избежать этой проблемы, но сводится к первому варианту (вернуть структуру). В целом, верните структуру или несколько аргументов указателя - лучший выбор. –

3

Вы не можете возвращать несколько значений в C. Ваши варианты для возврата структуры или передать в ссылках на переменные вы хотите изменить:

Возврат структура:

struct studio_stuff { 
    int studio; 
    int one; 
    int two; 
}; 

struct studio_stuff foo() 
{ 
    struct studio_stuff ret; 
    ret.studio = 0; 
    ret.one = 1; 
    ret.two = 2; 
    return ret; 
} 

Pass в ссылках для изменения:

void foo(int * studio, int * one, int * two) 
{ 
    *studio = 0; 
    *one = 1; 
    *two = 2; 
} 
2

Оператор запятой оценивает свой первый операнд, отбрасывает результат и дает результат второго.

Так return studio, one, two оценит studio, отбросить значения, оценить one, отбросить значения, оценить two и вернуть это значение.

Невозможно вернуть несколько значений из функции. Возможные значения: вернуть struct (значение struct состоит из набора значений) или передать дополнительные аргументы, являющиеся указателями. Например;

struct X func(); 

работает, потому что struct X может содержать несколько значений.

В качестве альтернативы

int func(double *y); 

это функция, которая может вернуть Int или установить значение *y (который будет виден вызывающему абоненту).