O que impossibilidade de retornar matrizes realmente significa em C?
Não estou tentando replicar a pergunta usual sobre C não poder retornar matrizes, mas aprofundar um pouco mais nela.
Não podemos fazer isso:
char f(void)[8] {
char ret;
// ...fill...
return ret;
}
int main(int argc, char ** argv) {
char obj_a[10];
obj_a = f();
}
Mas nós podemos fazer:
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();
}
Então, eu estava examinando o código ASM gerado pelo gcc -S e parece estar trabalhando com a pilha, endereçando-x(%rbp)
como em qualquer outro retorno da função C.
O que há com o retorno de matrizes diretamente? Quero dizer, não em termos de otimização ou complexidade computacional, mas em termos da capacidade real de fazê-lo sem a camada struct.
Dados extras: estou usando Linux e gcc em uma Intel x64.