Вопрос: возможно ли вернуть int или структуру?
номер
Однако, есть обходной путь. Создайте объединение, которое может содержать вашу структуру или int. Затем вы создаете структуру-оболочку, содержащую одно такое объединение и одну переменную, которые вы используете для определения возвращаемого типа. Вы можете сделать так:
struct myStruct {
int a, b;
};
union myEnum {
struct myStruct s;
int i;
};
struct myContainer {
union myEnum e;
int retType;
};
struct myContainer myFunc() {
struct myContainer ret;
if(...) {
ret.e.s.a = 42;
ret.e.s.b = 99;
ret.retType = 0;
} else {
ret.e.i = 55;
ret.retType = 1;
}
return ret;
}
А потом используйте что-то вроде этого:
struct myContainer x = myFunc();
if(x.retType == 0) {
struct myStruct w = x.e.s;
// Do whatever you want to do if a struct is returned
} else if(x.retType == 1) {
int w = x.e.i;
// Do whatever you want to do if an int is returned
} else { /* Error */ }
Вы можете использовать структуру вместо объединения. Единственным недостатком является то, что он будет использовать немного больше памяти.
Это общее решение, которое вы можете использовать. Если вы думаете, что это загромождает код, вы можете вместо этого добавить два поля в существующую структуру:
typedef struct
{
// Old fields
char article[DIM_STRING];
double price;
char buyer[DIM_STRING];
// The integer you want to return
int integerValue;
// Used to determine which fields to use
int retType;
} Order;