2015-05-03 4 views
0

Я хочу вернуть несколько значений из метода:C - возвращение нескольких значений из метода

unsigned long long *operand1, *operand2; 
unsigned long long value1; 
int operation=0; 

Я думал о вводе этих ДАННЫЕ в массив символов, а затем восстановить их байт за байтом. Это хорошая идея? Как мне это сделать? Или вы могли бы предложить что-нибудь еще?

+0

Почему вы объявляете '* operand1, * operand2;' как указатели? C++ имеет поддержку опорных параметров. –

+0

Он сказал, что использует C. Прочтите название. – Adrian

+2

@ addy2012 Он отметил это C++, поэтому ответы на C++ отвечают на этот вопрос. Если он не хочет отвечать на C++, он должен удалить тег C++. –

ответ

1

С простым кодом C вы, вероятно, хотите иметь что-то вроде

typedef struct params_ { 
    unsigned long long operand1, operand2; 
    unsigned long long value1; 
    int operation; 
} params_t; 

int foo(struct params_* p) { 
    int retcode = 0; 
    // do something with p along operation 
    if(p->operation == 0) { 
     p->value1 = 100 * p->operand1 + p->operand2; 
    } 
    else if(p->operation == 1) { 
     // ... 
    } 
    // ... 
    else { 
     retcode = -1; 
    } 
    return retcode; 
} 

и использовать его как

int main(void) { 
    params_t params; 
    params.operation = 0; 
    params.operand1 = 5; 
    params.operand2 = 42; 
    if(foo(&params) < 0) { 
     // Error occurred 
    } 
    unsigned long long result = params.value1; 
    return 0; 
} 

Смотрите live demo here пожалуйста.

+0

эту строку: 'int foo (struct params_t * p) {' не компилируется. либо удалите модификатор 'struct', либо (лучше) устраните 'typedef' и просто объявите struct – user3629249

+0

@ user3629249 Исправлено , –

2

Я бы предложил использовать struct.

struct my_struct { 
    unsigned long long *operand1, *operand2; 
    unsigned long long value1; 
    int operation=0; 
}; 
+0

Shudder ... :-(. Я не вижу, чтобы это закончилось чем-то хорошим. –

2

Если вы используете C++ 11, тогда вы можете использовать std::tuple. См. Ссылку http://en.cppreference.com/w/cpp/utility/tuple для примеров того, как ее реализовать.

Это имеет преимущество перед struct, что вам не нужно объявлять новый объект для каждого набора типов, которые вы хотите вернуть.

+0

Разве он не хотел использовать простой C, как он заявил в названии? – Adrian

+1

Он был помечен как C++, так что я не был что они используют – Kvothe

Смежные вопросы