Я не пытаюсь воспроизвести обычный вопрос о том, что C не может возвращать массивы, но чтобы углубиться в него.
Мы не можем этого сделать:
char f(void)[8] {
char ret;
// ...fill...
return ret;
}
int main(int argc, char ** argv) {
char obj_a[10];
obj_a = f();
}
Но мы можем сделать:
struct s { char arr[10]; };
struct s f(void) {
struct s ret;
// ...fill...
return ret;
}
int main(int argc, char ** argv) {
struct s obj_a;
obj_a = f();
}
Таким образом, я сбрасывал код ASM, созданный gcc -S, и, похоже, работает со стеком, адресуя -x(%rbp)
как и с любой другой функцией возврата функции.
Что это такое с возвратными массивами напрямую? Я имею в виду не с точки зрения оптимизации или вычислительной сложности, а с точки зрения реальной возможности сделать это без структурного уровня.
Дополнительные данные: Я использую Linux и gcc на x64 Intel.