Когда я пытаюсь запустить этот код как есть, я получаю сообщение компилятора «error: несовместимые типы в обратном порядке». Я отметил местоположение ошибки в моем коде. Если я выйду из строки, то компилятор будет счастлив.несовместимый тип возврата из функции struct - C
Проблема заключается в том, что я хочу вернуть значение, представляющее недопустимый ввод функции (который в этом случае вызывает f2 (2).) Я хочу, чтобы структура возвращалась с данными, если функция вызывается без использования 2 в качестве параметр.
Я чувствую только два пути, чтобы либо:
сделать функция возвращает указатель STRUCT вместо мертвой на структура, но тогда моя функция звонящий будет выглядеть смешно, как я должен изменить yb до y-> b, и операция может быть медленнее из-за дополнительного шага выборки данных в памяти.
Выделить дополнительную память, нулевой байт заполнить ее и установить возвращаемое значение для структуры в этом месте в памяти. (пример:
return x[nnn];
вместоreturn x[0];
). Этот подход будет использовать больше памяти, а некоторая обработка с нулевым байтом заполняет его.
В конечном счете, я ищу решение, которое будет самым быстрым и чистым (с точки зрения кода) в долгосрочной перспективе. Если мне нужно зацикнуться на использовании ->
для обращения к элементам элементов, то я думаю, что это путь.
У кого-нибудь есть решение, использующее наименьшую мощность процессора?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
long a;
char b;
}ab;
static char dat[500];
ab f2(int set){
ab* x=(ab*)dat;
if (set==2){return NULL;}
if (set==1){
x->a=1;
x->b='1';
x++;
x->a=2;
x->b='2';
x=(ab*)dat;
}
return x[0];
}
int main(){
ab y;
y=f2(1);
printf("%c",y.b);
y.b='D';
y=f2(0);
printf("%c",y.b);
return 0;
}
Что такое скалярный член? Из физики я знаю, что скаляр - это значение, которое имеет только величину, но не направление. Что скаляр в программировании? –
Подробности приведены в ABI. Но 'int',' double' и 'char *' - все скалярные типы –