rickfelix Posted April 29, 2009 at 08:59 PM Report #260076 Posted April 29, 2009 at 08:59 PM Olá de novo :-) Estou aqui com uma duvida, que não estou a conseguir esclarecer através de pesquisa no google, então venho perguntar-vos a vocês, eheh 😉 Eu queria que numa função, a mesma retornasse vários valores, por exemplo: (...) int retorna(int x, int y, int z, int a){ x = x+y; z = z+a; return a z; } Isto é possivel de fazer? ou se não for alguém tem alguma sugestão de como o será possivel fazer? Obrigado! rick
bruno1234 Posted April 29, 2009 at 09:04 PM Report #260077 Posted April 29, 2009 at 09:04 PM Não, ou bem q retornas a ou z nesse caso, os dois não. Se queres retornar 2 inteiros, dou-te 2 sugestões: 1) Retornar um array de 2 posições com 2 inteiros. 2) Criares um struct com 2 campos, inteiros no caso, e retornares essa struct. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
Baderous Posted April 29, 2009 at 09:07 PM Report #260078 Posted April 29, 2009 at 09:07 PM Passas como parâmetro da função o endereço das variáveis que vão guardar os valores que queres devolver, e depois na função trabalhas com apontadores.
bruno1234 Posted April 29, 2009 at 09:14 PM Report #260080 Posted April 29, 2009 at 09:14 PM Passas como parâmetro da função o endereço das variáveis que vão guardar os valores que queres devolver, e depois na função trabalhas com apontadores. Com esta solução tens q ter em atenção q alteras o valor da variavel q passas como parametro, visto estares a passar o apontador. Se for essa a intenção, então é o q deves fazer. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
rickfelix Posted April 29, 2009 at 09:18 PM Author Report #260081 Posted April 29, 2009 at 09:18 PM era mesmo isso, alterar o valor da variável, portanto se trabalhar apenas passando os endereços e alterando os valores dos mesmos, ainda que seja de ficheiros diferentes, ele assume sempre o valor que lhe atribuir, certo? Obrigado pela ajuda 😉
rickfelix Posted April 29, 2009 at 09:38 PM Author Report #260089 Posted April 29, 2009 at 09:38 PM Um exemplo poderia ser assim? extern mudavalor(int *arg1){ *arg1 = 10; }
Ferreira Posted April 29, 2009 at 09:53 PM Report #260097 Posted April 29, 2009 at 09:53 PM "extern" não é um tipo de retorno. Nesse caso deves pôr "void". http://twitter.com/ferreira
rickfelix Posted April 29, 2009 at 10:01 PM Author Report #260101 Posted April 29, 2009 at 10:01 PM mas eu estou a fazer uma biblioteca com funções, axo que só com extern é que a função aceita ser chamada, certo?
Baderous Posted April 29, 2009 at 10:04 PM Report #260105 Posted April 29, 2009 at 10:04 PM Podes fazer #include da biblioteca.
rickfelix Posted April 29, 2009 at 10:19 PM Author Report #260112 Posted April 29, 2009 at 10:19 PM sim eu faço include da biblioteca, mas ainda assim na declaração da função na biblioteca não é necessário colocar o extern? 🙂
Baderous Posted April 29, 2009 at 10:26 PM Report #260113 Posted April 29, 2009 at 10:26 PM Não. Extern usas quando estás a referenciar uma variável global de outro ficheiro.
rickfelix Posted April 29, 2009 at 10:53 PM Author Report #260125 Posted April 29, 2009 at 10:53 PM ah ok não sabia, tks Baderous
pedrotuga Posted April 29, 2009 at 11:13 PM Report #260138 Posted April 29, 2009 at 11:13 PM Devolver estruturas de dados é uma das coisas que em C é feito 'manualmente' ao contrario de liguagens orientadas a objectos. Pessoalmente não gosto de ver funções que são usadas para devolver valores sem uma instrução return. Acho deselegante na medida em que é muito menos óbvio mais tarde quando nós, ou alguem, lê o código. Em C só é possível devolver tipos de dados básicos, pelo que quando é necessario devolver outro tipo de dados usa-se um ponteiro para um ponto bem identificado da estrutura em questão. Tipicamente é por exemplo o inicio de uma string, a raíz de uma árvore, o nó sentinela de uma lista, etc. PS: alguem que esteja habituado a programar em C podia escrever uma página sobre isto no nosso wiki. É uma pergunta frequente.
rickfelix Posted April 29, 2009 at 11:26 PM Author Report #260143 Posted April 29, 2009 at 11:26 PM Pedro, Eu usei a sugestão de modificar directamente na variável através do acesso á sua localização de memória, para o que necessito é efectivamente o que faz mais sentido. Eu como estou habituado a linguagens orientadas a objecto, tipicamente retornaria os valores em causa, mas visto não ser possivel em C, de acordo com o que estou a programar é a forma que melhor se adequa.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now